添加到QByteArray,第9位为1字节

时间:2013-11-05 13:36:18

标签: qt qbytearray

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

但是根据win32API函数:ReadFile(....)我可以从COM流中读取ONLY bytes = 1,2,3 .....

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

所以一方面我有1字节(8位)的正确(实际)数据 - 另一方面我有第9位(0或1)的值;总共2个对象必须创建广义数据的值。 我如何将这些对象合并为一个&最终QByteArray对象?因为全局函数ReadComData可以且必须仅返回QByteArray个对象。

1 个答案:

答案 0 :(得分:1)

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

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

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