Linux shell脚本:十六进制数到二进制字符串

srn*_*nka 6 linux shell hex

我在shell脚本中寻找一些简单的方法,将十六进制数转换为0和1个字符的序列.

例:

5F - >"01011111"

是否有任何命令或简单的方法来完成它或我应该为它写一些开关?

Ale*_*sky 11

echo "ibase=16; obase=2; 5F" | bc
Run Code Online (Sandbox Code Playgroud)

  • 这与所选答案不同.这有'5F`,而选中的答案有'5f`.这个答案适用于`bc` 1.06.95,而选定的答案则没有. (4认同)

kev*_*kev 7

$ printf '\x5F' | xxd -b | cut -d' ' -f2
01011111
Run Code Online (Sandbox Code Playgroud)

要么

$ dc -e '16i2o5Fp'
1011111
Run Code Online (Sandbox Code Playgroud)
  • i命令将弹出堆栈顶部并将其用作输入库.
  • Hex数字必须为大写,以避免与dc命令发生冲突,并且不限于A-F输入基数大于16.
  • o命令对输出库执行相同的操作.
  • p命令将在其后面以换行符打印堆栈的顶部.


Luc*_*hux 7

我在Linux中使用'bc'命令.(比转换更复杂的计算器!)

echo'ibs = 16; obase = 2; 5f'| 公元前

ibase参数是输入基数(在本例中为hexa),并且取消输出基数(二进制).

希望能帮助到你.

  • 使用`bc`版本1.06.95`echo'ibs = 16; obase = 2; 5f'| bc`产生错误:`(standard_in)1:语法错误`.但是,`echo'ibase = 16; obase = 2; 5F'| bc`工作并生成`1011111`. (4认同)
  • 在“ibase”之前设置“obase”。如果首先定义了 `ibase`,`bc` 将尝试解释 `obase`,就好像它是用 `ibase` 编写的,可能会产生错误的结果。见[这个问题](http://stackoverflow.com/questions/9889839/bc-and-its-ibase-obase-options)。 (2认同)