当我从QByteArray类型的对象中的COM端口准确地读取字节流并且只有1字节的数据时,我现在遇到了这样的情况。但是一个非常不友好的协议要求在从COM端口读取数据后有9位数据。
但根据win32API函数:ReadFile(....)我只能从COM流中读取bytes= 1,2,3.....
所以-这就是为什么我在这个函数的帮助下只读取了8个bits=1字节,并且在一些奇偶校验位操作的帮助下,我正在计算广义数据的第9位的值……
因此,一方面,我有1字节(8位)的正确(实数)数据-另一方面,我有第9位(0或1)的值;2个对象,它们总和必须创建广义数据值。如何将这些对象组合成一个最终的QByteArray对象?因为全局函数ReadComData可以而且必须只返回QByteArray对象。
发布于 2013-11-06 02:41:17
UART不能“写入”9位数据。在网络上,您的数据(通常为8位)通常是在起始位和停止位之间成帧的,因此您发送的每个字节都需要传输10位。如果有奇偶校验位,则在最后一个数据位之后、停止位之前传输。但这是由发送UART生成的,而不是协议的一部分。典型UART 16550的数据总线只有8位宽(实际上可以发送5位、6位、7位或8位数据)。
在接收端,必须根据线路上的内容配置UART。如果您的发送器使用奇偶校验位,则应相应地对UART进行编程(通过"COM“端口设置)。奇偶校验位只是为了帮助检查线路上的错误。它基于数据位--您不能在奇偶校验位中放入另一个数据位。接收UART可用于检查奇偶校验错误(通过线路状态寄存器(LSR)读取),这可通过系统调用传递给您。
您的协议可能会将数据拆分到多个字节中。如果是这种情况,那么将两个字节转换为一个16位字,并屏蔽不想使用的6位。
https://stackoverflow.com/questions/19790284
复制相似问题