将串行接收的数据字节转换为十六进制文本

将串行接收的数据字节转换为十六进制文本

嗨,现在我写入字节数据(例如,\x00\x11\x22)从我的 PC 到在 ttyS1 端口运行 unix 的设备的串行端口。我可以使用以下任一方式打印数据

cat /dev/ttyS1
od -x < /dev/ttyS1

两者都有效,但是使用 cat 我会打印“▒▒”。使用 od,我看到一些数据字节:

0000000     00fe
0000001

这不是我发送的(001122Hex)。

如何获得正确的十六进制显示?

编辑:tty权限设置:

stty -F /dev/ttyS1 speed 115200 cs8 -cstopb -parenb -echo time 3 min 0

编辑2: 发生了一些奇怪的事情,我不知道为什么。我尝试发送不同的数据:“1049”,然后我的程序将其发送为“\x10\x49”。 od 返回:

0000000    4910
0000002

似乎它颠倒了字节。但我现在不明白的是,如果我有重复的数字,如“\x11\x49”,一旦数据损坏。似乎所有重复的值,如 x11、x00、x22,由于某种原因都被错误地转换了。并且,任何超过 8 的值也会被错误翻译。知道为什么吗?使用 hexdump 或 od 给出相同的结果。

答案1

od 表明您在这里刚刚收到 254 Decimal,左边的 par 是“行号”。

我认为这里的问题是你如何发送数据,或者你的 /dev/ttyS1 权限,你能在这部分开发更多吗?

如果使用 xxd -r 你会看到什么?

相关内容