[英]linux - serial port programming ( ASCII to Byte )
我试图从串行端口接收数据。 但是,这些数据对我来说是无法识别的。 根本原因是因为这些都是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]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.