Shell - 将二进制文件逐字符读取为十六进制

Shell - 将二进制文件逐字符读取为十六进制

我正在尝试逐字符读取串行输入(/dev/tty*)。我需要它来解析遵循相应协议的数据。我目前的方法如下:

while read -rs -n 1 c; do
    echo Read a char:
    echo ${c}
done < "${SERIAL_PORT}"

这是可行的,除了数据是二进制并且某些字节是 \x00(不允许作为变量中的字符)这一事实之外。我的目标是首先将字节转换为十六进制字符串(两个字符),然后将其存储在变量中。这就是我陷入困境的地方。有什么好的方法可以做到这一点?我更愿意保持 posix 兼容。

答案1

用于od为输入的每个字节/字符创建十六进制 ASCII 表示,并一次输出这些:

od -v -An -txC <input |
awk '{ for (i = 1; i <= NF; ++i) print $i }'

这将每行输出一个十六进制数字。

如果您愿意,您可以阅读本文read,但如果您可以在现有代码中进行处理,那就更好了awk

相关内容