我试图从串口接收数据。但是,我无法识别这些数据。根本原因是因为它们是 ASCII 格式的。要解码数据,它需要是字节格式。
我创建的缓冲区是unsigned char [255]
,我尝试使用
while (STOP==FALSE) {
res = read(fd,buf,255);
buf[res]=0;
printf(":%x\n", buf[0]);
if (buf[0]=='z') STOP=TRUE;
}
这里有两个问题:
实际情况下数据可能少于 255。它可能需要 255 个数组中的 20 - 30 个数组。在这种情况下,我如何打印 20 个数组?
正确的输出应该是 41542b ( AT+ ) 作为整个命令的开头,因为这是 AT 命令。所以我希望 buf[0] 一开始应该是 41。但是,我不知道为什么第二个是 e0 而我希望有 54 (T)。
谢谢
最佳答案
Ascii 是以字节为单位的文本编码。阅读它们没有区别,只是您如何解释您阅读的内容的问题。这不是你的问题。
您的问题是您一次最多读取 255 个字节并且只打印其中的第一个字节。
当您需要二进制数据(可能包含 0
字节)时,将 buf[res]
设置为 0
毫无意义。这对终止文本字符串很有用。
只需在您的缓冲区上使用一个循环,例如
for (int i = 0; i < res; ++i)
{
printf("%x", buf[i]);
}
关于c - linux - 串口编程(ASCII 转字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32734514/