将小的十六进制值转换为二进制值的问题

Issues converting a small Hex value to a Binary value

我正在尝试获取具有十六进制数字的文件的内容并将该数字转换为二进制并输出到文件。

这是我正在尝试但未获得二进制值的方法:

    xxd -r -p Hex.txt > Binary.txt

Hex.txt的内容是:ff

我也尝试过 FF 和 0xFF,但我只想使用 ff,因为我从中提取信息的设备采用该格式。

我得到的是上面有 2 个点的 y,而不是它应该是的 11111111。

如果我把它改成ee,我会得到一个有2个点的i。看起来读起来还不错,但根据我在 xxd -r -p 命令上读到的内容,它没有以正确的格式输出。

我发现将十六进制转换为二进制的其他方法要么也不起作用,要么是一个相当大的 Bash 脚本,似乎没有必要完成我认为是一项简单的任务。

这也给了我带 2 个点的 y。

    $ for i in $(cat Hex.txt) ; do printf "\x$i" ; done > Binary.txt

出于某种原因,我找到的几乎所有解决方案都提供了这种格式,而不是包含 1 和 0 的人类可读二进制值。

感谢任何帮助。我计划在脚本中使用它来使用 curl 从数字记录器设备中提取继电器值,并为 Home Assistant 提供一个可读文件来记录继电器状态。数字记录器 curl cmd 使用十六进制一次给出所有 8 个继电器的状态,而不是能够拉出特定继电器的状态。

如果"file.txt"包含:

fe
0a

而你运行这个:

perl -ane 'printf("%08b\n",hex($_))' file.txt

你会得到这个:

11111110
00001010

如果你经常使用它,你可能想在你的登录配置文件中使用它的bash功能,按照这些行 - 非常尊重空间和semi-colons 可能看起来没有必要:

bin(){ perl -ane 'printf("%08b\n",hex($_))'  ; }

那么你就可以做到:

bin file.txt

如果您出于某种原因不喜欢 Perl,您可以在没有它的情况下实现类似的功能,如下所示:

tr '[:lower:]' '[:upper:]' < file.txt |
   while read h ; do
      echo "obase=2; ibase=16; $h" | bc
   done