Преобразование CRC uint в QByteArray QT — C++

У меня есть значение CRC в uint, то есть:

95DF

Моя цель - возврат из двух байтов uint в QByteArray.

Я получаю это:

`CRC не ниже 95DF

//просто я должен вернуть это

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

Я попытался преобразовать uint в QString, но это одно изменяет возвращаемое значение. Как сохранить результат и вернуть QByteArray?

Спасибо


person Mr. Developer    schedule 10.07.2017    source источник


Ответы (2)


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);
person selbie    schedule 10.07.2017
comment
с htons работают правильно, вместо этого с qToBigEndian не работают в qt. Я использую хтоны. Спасибо - person Mr. Developer; 10.07.2017
comment
@Mr.Developer - я сделал всего около дюжины опечаток, написав этот ответ. Пожалуйста, дважды проверьте мой ответ на последнюю редакцию, прежде чем вставлять его в свой код. - person selbie; 10.07.2017

Вы также можете использовать QDataStream для достижения этой цели:

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