c - linux - 串口编程(ASCII 转字节)

标签 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)。

enter image description here

谢谢

最佳答案

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

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

当您需要二进制数据(可能包含 0 字节)时,将 buf[res] 设置为 0 毫无意义。这对终止文本字符串很有用。

只需在您的缓冲区上使用一个循环,例如

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

关于c - linux - 串口编程(ASCII 转字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32734514/

相关文章:

C - 使用 open() 和 fdopen() 时关闭文件的正确方法

macos - 使用 IOKit 与 USB 设备通信

serial-port - 字节流中数据包的识别

linux - Datastage 项目备份自动化

linux - 在 linux 启动时运行应用程序

c - 使用 "int 0x80"调用 Linux 内核系统调用

c++ - Qt QextSerialPort 静态库

c - 我们如何在 C 中使用递归打印系列 1+ 11 +111+........ 最多 N 项的总和

c - libcurl:使用 WriteMemoryCallback 时 curl_easy_perform 上的段错误

c - 合并排序不适用于包含超过 521096 个元素的整数表