gpt4 book ai didi

c - 从串行端口 Linux C 读取 NULL 字符

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:58 26 4
gpt4 key购买 nike

我已经阅读了很多问题和答案,但没有找到任何解决方案。可能是我的问题不对,但我需要一些指导。我在 Linux 中使用串行端口,它正在从我的 Arduino 设备读取数据。每当我想将数据从 Arduino 发送到 Linux 时,我首先发送两个字节,表示将来自 Arduino 的总字节数。我将这两个字节转换为整数值并开始从串口读取数据。比方说,我想从 Ardiuno 发送 300 个字节到 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 int 值,这非常有效。但是当我必须读取小于 255 的数据时,问题就来了。假设我想读取 100 个字节,那么前两个字节将为 {0, 100}。 0是空字符,串口不处理(我手动写0到串口,它总是给我写入0字节),我的所有序列都出错了。所以我的问题是我可以从串行端口读取空字符还是有人请给我更好的解决方案..

提前致谢。

最佳答案

我的问题解决了。在 C 中处理字节时,不要将字节 (char) 与字符串混淆,就像我正在处理字节数组 (char data[]) 以及当我尝试使用 write 在串行端口上写入这些字节时长度为 strlen(data) 的方法,我只得到那些不为空的字节。 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com