【发布时间】:2017-10-15 03:24:07
【问题描述】:
我一直在互联网上搜索类似的问题,但没有找到任何好的解决方案。我在 ubuntu 中,我在串口上接收串行十六进制数据。我已经使用空调制解调器电缆将我的系统连接到 Windows 系统,并且 Windows 系统正在运行 docklight 软件,该软件正在发送如下所示的十六进制数据:
2E FF AA 4F CC 0D
现在通过保存数据,我并不是说我想在终端上打印数据。我只想将这些数据保存在缓冲区中,以便以后处理它。
读取我正在做的数据
res = read (fd, buf, sizeof buf)
//where buf is
unsigned char buf[255];
此时阅读后,buf包含一些随机字符。从互联网上的一些链接,我得到了一种将其转换为十六进制的方法:
unsinged char hexData[255];
for (int i = 0; i < res; i++)
{
sprintf((char*)hexData+i*2, "%02X", buf[i]);
}
现在这个 hexData 包含2EFFAA4FCC0D,这对我来说没问题。 (我不知道这是否是正确的做法)。现在假设我想将 hexData 中的 E 转换为十进制。但此时,E 将被视为字符而不是十六进制,所以我可能会得到 69 而不是 14。
如何将十六进制数据保存在变量中。我应该将它保存为字符数组还是 int 数组。谢谢。
【问题讨论】:
-
不清楚你收到了什么或你想从中得到什么。似乎对等方正在发送 ASCII 十六进制数据,但不清楚 char 流中是否有空格 - '2E FF AA 4F CC 0D' 建议用空格分隔的 ASCII 十六进制字节,而 'hexData+i* 2' 表示没有空格。 '如何将十六进制数据保存在变量中。我应该将它保存为 chars 数组还是 int' 是没有意义的,因为你可以使用串行字节,或者两者都没有,或者其他东西。