0

我现在有一种情况,当我从 COM 端口QByteArray准确读取类型对象中的字节流并且只有 1 个字节的数据之后。但是一个非常不友好的协议需要在从 COM 端口读取数据后有 9 位数据。

但根据win32API函数:ReadFile(....)我只能从COM流中读取字节= 1,2,3.....

所以 - 这就是为什么我在这个函数的帮助下只读取 8 位 = 1 个字节,并在一些奇偶校验位操作的帮助下,我正在计算广义数据的第 9 位的值......

所以一方面我有 1 个字节(8 位)的正确(真实)数据 - 另一方面我有这个第 9 位(0 或 1)的值;2 总而言之必须创造广义数据价值的对象。如何将这些对象组合成一个和最终QByteArray对象?因为全局函数ReadComData可以而且必须只返回QByteArray对象。

4

1 回答 1

1

UART 不能“写入”9 位数据。在网络上,您的(通常为 8 位)数据通常在起始位和停止位之间进行帧化,因此您发送的每个字节都有 10 位传输。如果您有奇偶校验位,它会在最后一个数据位之后但在停止位之前传输。但这是由发送 UART 生成的,而不是协议的一部分。典型 UART 16550 的数据总线只有 8 位宽(您实际上可以发送 5、6、7 或 8 位数据)。

在接收端,必须根据线路上的内容配置 UART。如果您的发送方使用奇偶校验位,那么您相应地对 UART 进行编程(通过“COM”端口设置)。奇偶校验位只是为了帮助检查线路上的错误。它基于数据位——您不能将另一个数据位放入奇偶校验位。接收 UART 可用于检查奇偶校验错误(通过线路状态寄存器 (LSR) 读取),这可以通过系统调用传递给您。

您的协议可能会将数据拆分为多个字节。如果是这种情况,则将两个字节转换为一个 16 位字并屏蔽您不想使用的 6 位。

于 2013-11-05T18:41:17.070 回答