我今天在调试时遇到了一些奇怪的问题,我设法将其追溯到我最初忽略的问题。
看看这两个命令的输出:
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 hex)不知何故被xxd -r -p
. 因此,当我执行逆运算时,我得到一个空结果。
我想做的是将一些数据输入 minimodem。我需要通过 bit banging 有效地生成呼叫等待来电显示 (FSK)。我的 bash 脚本有正确的位,但如果我执行 hexdump,则无法打印的字符会丢失。不幸的是,minimodem 似乎只接受 ASCII 字符,我需要给它原始的十六进制,但它似乎在转换中被吃掉了。是否有可能以某种方式保留这些字符?我不认为这是任何选择,所以想知道是否有更好的方法。