linux - 串口编程(ASCII转字节)
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]);
}
我尝试从串口接收数据。但是,我无法识别这些数据。根本原因是因为它们是 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]);
}