您如何将十六进制数据直接通过管道传输到 bc 并将其干净地转换为二进制?

How do you Pipe hex data directly to bc and converting it to binary - cleanly?

十六进制(字符)到二进制的转换很有用,尤其是当您想查看一些十六进制字符串中的一些位时。

正是出于这个原因,我想将一些十六进制数据通过管道传输到 bc(称为 'basic calculator' 的 Unix 程序)并将其转换为二进制字符(1 和 0)。

通常我想 cat 一个十六进制数据文件(文件中的行十六进制数据)并将其通过管道传输到 bc 并让 bc 将其转换为二进制。或者我可以使用 xxd 将二进制文件转换为十六进制文件并将其通过管道传输到 bc.

有很多方法可以做到这一点,但考虑到 bc 需要一些指令,所有的方法看起来都有些复杂。如果没有带有一些 for 循环的 bash 脚本,如何简单地完成此操作?

自 Whosebug 以来,鼓励回答您自己的问题,这是我的解决方案:

xxd -c 32 -p file.bin | awk '{print toupper([=10=])}' | tr '\n' ' ' |  { read line; for i in $line; do echo "obase=2; ibase=16; $i" | bc ; done }

我不喜欢我的解决方案,因为它看起来很复杂。我想设计一种方法将 xxd 的输出通过管道传输到 bc,无需 for 循环,也无需使用 tr(我也可以使用大写字母)。无论如何,它有效,但我认为它可以做得更好。

我想这就是你想要的。

{ echo "obase=2; ibase=16"; xxd -c 32 -u -p file.bin; } | bc

它只是将设置和流式文件内容与大括号列表一起提供给 bcxxd-u 标志使其输出大写十六进制字母。