我知道如何将十六进制转储转换为 ASCII。
echo 54 58 72 56 etc | xxd -r -p-> 将产生 ASCII 输出
但我正在努力将以下二进制代码转换为 ASCII。
01000001 01110010 01100101 01101110 00100111 01110100 00100000 01111001 01101111 01110101 00100000 01100001 00100000 011011 00 01101001 01110100 01110100 01101100 01100101 00100000 01110011 01101000 01101111 01110010 01110100 00100000 01100110 01101 111 01110010 00100000 01100001 00100000 01110011 01110100 01101111 01110010 01101101 00100000 01110100 01110010 01101111 0110 1111 01110000 01100101 01110010 00111111 00001101 00001010
我需要使用“xxd”或尽可能短的类似命令来执行此操作。
先感谢您!
如果您想坚持使用xxd,那么您需要首先将每个二进制数转换为十进制数。如果您使用bash, 并x包含二进制字符串,则:
for a in $x; do printf "%x" $((2#$a)); done | xxd -r -p
Run Code Online (Sandbox Code Playgroud)
$((2#$a))是 bash 中的二进制到十进制的转换,并且printf会将其转换为十六进制。然后只需将其通过管道传输到xxd- 并获取之前得到的内容。
你对于冲锋队来说是不是有点矮了?
如果字符串包含在文件中,请逐行读取,然后逐字读取。另一种选择是仅使用printf,但是您需要八进制数,因此使用printf两次:
for a in $x; do printf \\$(printf "%o" $((2#$a))); done
Run Code Online (Sandbox Code Playgroud)
hex实际上,最后一个也可以完成,只需使用 代替\\ \\x并%o恢复回%x。