使用'xxd'进行二进制到ASCII转换

问题描述 投票:1回答:1

我知道如何将十六进制转储转换为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 01101100 01101001 01110100 01110100 01101100 01100101 00100000 01110011 01101000 01101111 01110010 01110100 00100000 01100110 01101111 01110010 00100000 01100001 00100000 01110011 01110100 01101111 01110010 01101101 00100000 01110100 01110010 01101111 01101111 01110000 01100101 01110010 00111111 00001101 00001010

我需要使用'xxd'或类似的可能命令来做这个。

先感谢您!

binary ascii
1个回答
1
投票

如果你想坚持使用xxd,那么你需要先将每个二进制数转换为十进制数。如果你正在使用bash,而x包含你的二进制字符串,那么:

for a in $x; do printf "%x" $((2#$a)); done | xxd -r -p 

$((2#$a))是bash中的二进制到十进制转换,而printf会将其转换为十六进制。然后把它送到xxd - 然后得到你以前得到的东西。

对于风暴骑兵来说,你不是有点短吗?

如果字符串包含在文件中,则逐行读取,然后逐字读取。另一个选择是只使用printf,但是你需要八进制数,所以使用printf两次:

for a in $x; do printf \\$(printf "%o" $((2#$a))); done

实际上,最后一个也可以用hex完成,只需使用而不是\\ \\x%o恢复到%x

© www.soinside.com 2019 - 2024. All rights reserved.