Конвертировать QByteArray из старшего в младший - PullRequest
0 голосов
/ 09 мая 2018

Я думаю, что я немного растерялся. Я пробую такую ​​простую вещь, я не могу поверить, что в Qt нет ничего встроенного (используя Qt 5.6.2). Я пытаюсь преобразовать данные внутри QByteArray с обратного порядка байтов. Всегда начинается с одного и того же теста QByteArray, как этот.

QByteArray value;
value.append(0x01);
value.append(0x02);
value.append(0x03);
qDebug() << "Original value is: " << value.toHex(); // “010203” like expected

Что мне нужно, так это младший порядок байтов, что означает, что на выходе должно быть «030201». Есть ли какая-то вещь в Qt Framework? Я не нахожу один. Что я пробовал до сих пор

// Try with build in QtEndian stuff
QByteArray test = qToLittleEndian(value);
qDebug() << "Test value is: " << test.toHex(); // 010203

// Try via QDataStream
QByteArray data;
QDataStream out(&data, QIODevice::ReadWrite);
out.setByteOrder(QDataStream::LittleEndian);
out << value;
qDebug() << "Changed value is: " << data.toHex(); // "03000000010203"

Есть хорошая идея? Или мне действительно нужно переложить руки? Не нашел ничего полезного на SO или на Google или, возможно, задать неправильный вопрос ...

1 Ответ

0 голосов
/ 09 мая 2018

Звучит так, будто вы хотите перевернуть массив, а не манипулировать порядком байтов любого из многобайтовых типов внутри массива. Стандартная библиотека имеет решение для этого:

QByteArray arr;
std::reverse(arr.begin(), arr.end());
// arr is now in reversed order
...