2015-07-22 89 views
0

十六进制(字符)到二进制转换很有用,特别是当您想要查看一些十六进制字符串内部的几个位时。如何将十六进制数据直接输入到bc并将其转换为二进制 - 干净吗?

正是因为这个原因,我想管一些十六进制数据到bc(Unix程序称为“基本计算器”)并将其转换为二进制字符(1s和0s)。

通常我想猫一个十六进制数据(文件中的行十六进制数据)的文件,并将其管道到bc并有bc将其转换为二进制。或者我可以将一个二进制文件转换为十六进制的xxd和管道到bc。

有办法做到这一点,但考虑到BC需要一些指令,所有的方法似乎有点复杂。这怎么可以简单地完成,没有一个for循环的bash脚本?

+1

究竟是什么问题? –

+0

我改写了这个问题。我正在使用bc将十六进制转换为二进制。我正在寻求更好的方式来做到这一点。 – Xofo

+0

谢谢 - 看起来不错,但返回>字符,我认为你的解决方案中有一个语法错误。好开始。 – Xofo

回答

1

我认为这是做你想做的。

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

它只是饲料均设置和流媒体文件内容bc有一个括号列表。 -u标志为xxd使其输出大写的十六进制字母。

+0

这是一个很好的答案,并会证明对他人有用。 – Xofo

0

由于StackOverflow上,鼓励在回答自己的问题,这是我的解决方案:

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

,因为它似乎令人费解,我不喜欢我的解决方案。我想设计一种方法来将xxd的输出传递给bc,而不使用for循环,并且不使用tr(我也可以使用大写字母)。无论如何,它的工作原理,但我认为它可以做得更好。

+0

这似乎是问题的一个组成部分,因为问题本身仍然缺乏实际的完整问题。 –

+0

理想情况下,我想制作最理想的问题。这个答案可以使它成为它的状态,我相信会有更好的答案出现。 – Xofo

相关问题