linux - 串口编程(ASCII到字节)

时间:2015-09-23 08:26:41

标签: c linux serial-port

我试图从串口接收数据。但是,这些数据对我来说无法识别。根本原因是因为那些是ASCII。要解码数据,它需要是字节格式。 enter image description here

我创建的缓冲区是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)。

  3. enter image description here

    由于

1 个答案:

答案 0 :(得分:2)

Ascii是一个以字节为单位的文本编码。阅读它们没有区别,这只是你解释所读内容的问题。这不是你的问题。

您的问题是您一次读取最多255个字节,并且只打印第一个字节。

当您期望二进制数据(可能包含buf[res]个字节)时,将0设置为0是没有意义的。这对终止文本字符串非常有用。

只需在缓冲区上使用循环,例如

for (int i = 0; i < res; ++i)
{
    printf("%x", buf[i]);
}