如何在保留不可打印字符的同时将十六进制转换为 ASCII
How to convert hex to ASCII while preserving non-printable characters
我今天在调试时遇到了一些奇怪的问题,我设法将其追溯到我一开始忽略的地方。
看看这两个命令的输出:
root@test:~# printf '%X' 10 | xxd -r -p | xxd -p
root@test:~# printf '%X' 43 | xxd -r -p | xxd -p
2b
root@test:~#
第一个 xxd 命令将十六进制转换为 ASCII。第二个将 ASCII 转换回十六进制。 (十进制 43 = 十六进制 2b)。
不幸的是,似乎将十六进制转换为 ASCII 不会 保留不可打印的字符。例如,原始十六进制“A”(十进制 10 = A 十六进制)不知何故被 xxd -r -p
吃掉了。因此,当我执行逆运算时,我得到一个空结果。
我想做的是将一些数据输入迷你调制解调器。我需要通过 bit banging 有效地生成呼叫等待呼叫者 ID (FSK)。我的 bash 脚本有正确的位,但如果我执行 hexdump,则不可打印的字符会丢失。不幸的是,迷你调制解调器似乎只接受 ASCII 字符,我需要向它提供原始十六进制,但它似乎在转换过程中被吃掉了。是否有可能以某种方式保留这些字符?我不认为它是任何选择,所以想知道是否有更好的方法。
xxd
每个字节需要两个字符。一A
无效。做:
printf '%02X' 10 | xxd -r -p | xxd -p
How to convert hex to ASCII while preserving non-printable characters
使用xxd
。如果您的输入只有一个字符,请用首字母 0
.
填充它
ASCII does not preserve non-printable characters
它确实保留任何字节,xxd
是处理 shell 中任何二进制数据的常用工具。
Is it possible to preserve these characters somehow?
是 - 输入每字节两个字符的序列到 xxd
。
我今天在调试时遇到了一些奇怪的问题,我设法将其追溯到我一开始忽略的地方。
看看这两个命令的输出:
root@test:~# printf '%X' 10 | xxd -r -p | xxd -p
root@test:~# printf '%X' 43 | xxd -r -p | xxd -p
2b
root@test:~#
第一个 xxd 命令将十六进制转换为 ASCII。第二个将 ASCII 转换回十六进制。 (十进制 43 = 十六进制 2b)。
不幸的是,似乎将十六进制转换为 ASCII 不会 保留不可打印的字符。例如,原始十六进制“A”(十进制 10 = A 十六进制)不知何故被 xxd -r -p
吃掉了。因此,当我执行逆运算时,我得到一个空结果。
我想做的是将一些数据输入迷你调制解调器。我需要通过 bit banging 有效地生成呼叫等待呼叫者 ID (FSK)。我的 bash 脚本有正确的位,但如果我执行 hexdump,则不可打印的字符会丢失。不幸的是,迷你调制解调器似乎只接受 ASCII 字符,我需要向它提供原始十六进制,但它似乎在转换过程中被吃掉了。是否有可能以某种方式保留这些字符?我不认为它是任何选择,所以想知道是否有更好的方法。
xxd
每个字节需要两个字符。一A
无效。做:
printf '%02X' 10 | xxd -r -p | xxd -p
How to convert hex to ASCII while preserving non-printable characters
使用xxd
。如果您的输入只有一个字符,请用首字母 0
.
ASCII does not preserve non-printable characters
它确实保留任何字节,xxd
是处理 shell 中任何二进制数据的常用工具。
Is it possible to preserve these characters somehow?
是 - 输入每字节两个字符的序列到 xxd
。