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;
     }

这里有两个问题:

  1. 实际情况下数据可能小于255。它可能需要 255 个数组中的 20 - 30 个数组。在这种情况下,我如何打印 20 个数组?

  2. 正确的输出应该是 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]);
}