解析C++中设备文件的 ASCII 输出
Parse ASCII Output of a Device-File in C++
我为USB设备编写了一个内核空间驱动程序。例如,如果它已连接,它将挂载到/dev/myusbdev0。通过带有 echo -en "command">/dev/myusbdev0 的命令行,我可以向设备发送命令并使用 cat/dev/myusbdev0 读取结果。
好的,现在我必须编写一个C++程序。起初,我会打开设备文件进行读/写:
int fd = open("/dev/echo", O_RDRW);
之后,将发送一个cmd以使设备正常工作:
char cmd[] = { "x02sEN LMDscandata 1x03" };
write(fd, cmd, sizeof(cmd));
现在我到了我现在还不知道如何处理的部分。 我现在需要从设备读取,因为它不断向我发送数据。 我现在需要读取和解析这些数据...
char buf[512];
read(fd, buf, sizeof(buf);
数据如下所示,每个数据都以 \x02 开头,以 \x03 结尾,它们的大小并不总是相同的:
sRA LMDscandata 1 1 89A27F 0 0 343 347 27477BA9 2747813B 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 186A0 1388 15 8A1 8A5 8AB 8AC 8A6 8AC 8B6 8C8 8C2 8C9 8CB 8C4 8E4 8E1 8EB 8E0 8F5 908 8FC 907 906 0 0 0 0 0 0 所有值都用 20hex {SPC} 分隔
它认为我需要某种 while 循环来连续读取 \x02 中的数据,直到我读取 \x03。如果我有一个完整的扫描,我需要解析这个ASCII消息的单独部分(一些变量uint_16,uint_8,enum_16,...
知道如何将完整的扫描读取到 buf[] 中,然后解析其组件吗?
正如您所说,设备正在连续发送,我建议添加一个队列来容纳传入的块,并添加一些调度来取出部分队列,即 x02 到 x03,将完成的工作与接收块分离。
此外,您可以让单个对象处理从 x02 到 x03 的一个完整块,也许是线程化的(对给定的信息有意义)。
设备 => 块读取器 => 输入队列 => 输入读取器 =>
数据处理希望这有帮助
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 如何在 Windows 10 中使用 C++ 输出低 ASCII?
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 输出字符的ASCII值
- 重复输出的类型是怎么回事,它如何区分迭代次数和 Ascii 代码?
- 控制台输出显示ASCII值,而不是数字的预期数字
- 没有得到 ASCII 编号 = 7 的字符串打印输出
- C++:输出文件中ASCII字符计数频率的结果时出现的奇怪数字
- C++ - 将 ASCII 输出到 cmd.exe
- 输出中不断出现随机ascii字符
- 流式输出扩展 ASCII
- 解析C++中设备文件的 ASCII 输出
- 如何使用 ASCII 代码在输出屏幕上显示图像C++
- qDebug输出QString UTF-8非ascii符号,如uxxxx