Qt 将第9位的1字节添加到QByteArray

Qt 将第9位的1字节添加到QByteArray,qt,qbytearray,Qt,Qbytearray,当我从COM端口读取QByteArray对象中的字节流后,我现在有一种情况,即只键入1字节的数据。但一个非常不友好的协议要求在从COM端口读取数据后有9位数据 但是根据win32API函数:ReadFile(..)我只能从COM流中读取字节=1,2,3 所以-这就是为什么我在这个函数的帮助下只读取8位=1字节,在奇偶校验位的一些操作的帮助下,我在计算广义数据的第9位的值 所以一方面我有1字节(8位)的正确(真实)数据,另一方面我有一个第9位的值(0或1);2个对象,其总和必须创建广义数据的值。

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

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

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

所以一方面我有1字节(8位)的正确(真实)数据,另一方面我有一个第9位的值(0或1);2个对象,其总和必须创建广义数据的值。 如何将这些对象组合成一个&final
QByteArray
对象?因为全局函数
ReadComData
只能返回
QByteArray
对象。

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

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


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

我不确定是否正确理解您的意思。如果COM端口中只有9位数据,则似乎根本无法读取它们。但如果端口中有许多9位项,则可以将它们读入QByteArray。它将包含所有数据,但很难访问每个9位项目,因为项目在两个字节之间共享且未对齐。这是你的问题吗?我可以通过函数ReadFile()读取9位数据(通常为8位)。第九位是奇偶校验位。所以-不要在黑匣子里找到黑猫,尤其是当根本没有猫的时候)。问题是如何将包含8位=1字节的QByteArray对象与独立数据位(0或1)组合起来。那么-如何做到这一点?如何写入操作QByteArray=QByteArray+BitOfData.No-mdb协议(自动售货机)使用实9位,我可以使用奇偶校验位虚拟化发送的9位数据帧。谷歌可以向你展示这些技术。。。。。因此,问题只在于将8位实际数据与第9模式位的值组合成一个QByteArray对象…@graphElem:我不明白为什么要使用QByteArray(8位数据的容器)处理9位数据。使用16位字和一点攻击来获得您想要的。因为全局函数“ReadComData”确实返回读取COM端口流的结果,它是在我当前任务之前创建的。因此,在我们的大量代码中,这个函数的所有入口点都希望通过从COM端口读取数据得到qbytearray对象。直到现在,我们才发现,在COM流中不仅会找到8位。这就是为什么我们现在正在寻找如何将8位数据与第9位模式相结合的想法。。。然后把它放到qbytearray里。。。。。。