我希望您能提供一种在shell脚本中将十六进制数转换为0和1字符序列的简便方法。
例如:
5F -> "01011111"
有没有命令或者简单的方法可以完成它,还是我需要为此编写一些开关?
echo "ibase=16; obase=2; 5F" | bc
我在Linux中使用了'bc'命令。(比转换更复杂的计算器!)
echo 'ibase=16;obase=2;5f' | bc
其中ibase参数表示输入基数(这里是十六进制),而obase则表示输出基数(二进制)。
希望对您有所帮助。
bc
,执行命令echo 'ibase=16;obase=2;5f' | bc
会出现错误:(standard_in) 1: syntax error
。然而,执行echo 'ibase=16;obase=2;5F' | bc
命令可以正常运行,并输出结果1011111
。 - nrz$ printf '\x5F' | xxd -b | cut -d' ' -f2
01011111
或者
$ dc -e '16i2o5Fp'
1011111
i
命令将弹出栈顶并将其用作输入基数。Hex
数字必须大写,以避免与 dc 命令发生冲突,并且如果输入基数大于 16
,则不限于 A-F
。o
命令对输出基数执行相同的操作。p
命令将打印堆栈顶部,并在其后添加换行符。Perl的printf
已经可以处理二进制数了:
$ perl -e 'printf "%08b\n", 0x5D'
01011101
echo -n 5f5f5f5f5f | cryptocli dd -decoders hex -encoders binary_string
产生:
0101111101011111010111110101111101011111
相反的情况也是成立的。
NB: 它并不完美,还有很多工作需要做,但它正在运行。
5F
,而所选答案是5f
。这个回答适用于bc
1.06.95,而所选答案不适用。 - nrz