繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM