我有很多这样的字符串,我想找到一个命令将其转换为 ascii 格式,我试过用 echo -e
和 od
转换,但都不行。
0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
这段代码将把文本 "0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2 "转换为由 11 个等值字节组成的数据流。 这些字节将被写入标准输出。
TESTDATA=$(echo '0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2' | tr '.' ' ')
for c in $TESTDATA; do
echo $c | xxd -r
done
正如其他人指出的,这不会产生可打印的 ASCII 字符串,原因很简单,指定的字节不是 ASCII 字节。 您需要提供更多关于如何获得该字符串的信息,以便我们为您提供帮助。
工作原理:xxd -r 将十六进制数据转换为二进制数据(类似于反向十六进制转储)。xxd 要求每一行都以该行第一个字符的索引号开头(运行十六进制转储,查看每一行如何以索引号开头)。 在我们的例子中,我们希望索引号始终为零,因为每次执行只有一行。 幸运的是,作为 0x 符号的一部分,我们的数据在每个字符前都有一个零。 小写的 x 会被 xxd 忽略,因此我们只需将每个 0xhh 字符通过管道输送到 xxd,然后让它完成工作即可。
tr 会将句点转换为空格,这样 for 就能正确分割。