2017-07-10 41 views
0

我已经CRC值转换成UINT是:转换CRC UINT到的QByteArray QT - C++

95DF

我的目标是在QByteArray中UINT两字节的回报。

我得到这样的:

`CRC UINT 95DF

//在简单 我应该返回这个

的QByteArray [0] = 95;
QByteArray [1] = DF;

我试过将uint转换为QString,但是这个改变了返回值。 何保持结果并返回QByteArray?

感谢

回答

1
unsigned int value = 0x95df; 
char bytes[2] = {}; 
bytes[0] = (value >> 8) & 0xff; 
bytes[1] = value & 0xff; 
QByteArray qba(bytes, 2); 

或者:

unsigned int value = 0x95df; 
value = qToBigEndian(value); // for x86 and little endian, this puts the bytes in expected order. no-op on big-endian 
QByteArray qba((char*)&value, 2); 
+1

与htons的工作,而不是与qToBigEndian不QT工作。我使用htons。谢谢 –

+0

@Developer先生 - 我只做了大约十几个打字的答案。在粘贴到您的代码之前,请仔细检查我的最新修订版答案。 – selbie

+0

好的,谢谢!正确工作我的校验和 –

0

您还可以使用QDataStream来实现这一目标:正确

QByteArray qba; 
QDataStream qbaStream(&seq,QIODevice::WriteOnly); 
qbaStream << static_cast<quint16>(value);