我读了很多问题和答案,但没有找到任何解决办法。也许我的问题不对,但我需要一些指导。我在Linux中使用串行端口,它从我的Arduino设备读取数据。每当我想从Arduino向Linux发送数据时,我首先发送两个字节,表示将从Arduino发送的总字节数。我将这两个字节转换成整数值,并开始从串行端口读取数据。假设,我想将300字节从Ardiuno发送到Linux,我只需先编写{1,44},然后通过以下公式将这1和44字节转换为int:

char data[] = {1, 44};
int to_read = data[0]
to_read = to_read << 8;
to_read = to_read | data[1];
return to_read;

这将给我300英特值,这是工作像魅力。但当我必须读取小于255的数据时,问题就来了。假设我想读取100个字节,那么前两个字节将是{0,100}。0是空字符,串行端口不处理它(我手动将0写入串行端口,它总是给我0字节的写入),并且我的所有序列都出错。所以我的问题是我能从串行端口读取空字符吗,或者有人能给我更好的解决方案。。
提前谢谢。

最佳答案

我的问题解决了。在处理C中的字节时,不要把bytes(char)和string混淆起来,就像我处理bytes数组(char data[])一样,当我试图用strlen(data)长度的write方法在串行端口上写这些字节时,我只得到那些不为空的字节。strlen在看到第一个空字符即\0后返回数据的长度,因此我没有得到所需的输出。我所做的是,如果我想写数据char data[] = {0, 4},那么我将这样做:

char data[] = {0, 4};
write(serial_port_fd, data, 2);

告诉write函数写入2个字节。如果我写这样的东西,这将写0和4:
char data[] = {0, 4}
write(serial_port_fd, data, strlen(data));

这将写入NOTHING
还有一件事,如果要在串行端口上写入不可打印字符(从字节值0到32),请确保已为原始输入和输出配置串行端口。看看这本指南:
http://www.cmrr.umn.edu/~strupp/serial.html#config

关于c - 从串行端口Linux C读取NULL字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20444613/

10-13 02:06