将QByteArray从big endian转换为little endian

时间:2018-05-09 15:39:03

标签: c++ qt endianness qbytearray

我觉得我在这里不知所措。我尝试这么简单的事情,我无法相信没有内置的Qt(使用Qt 5.6.2)。我尝试将QByteArray中的数据从big endian转换为little endian。总是以相同的测试QByteArray开始。

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

我需要的是小端,这意味着输出应为“030201”。到目前为止,在Qt框架中是否存在任何构建内容?我找不到一个。到目前为止我尝试了什么

// 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或谷歌上找不到任何帮助,或者可能会提出错误的问题......

1 个答案:

答案 0 :(得分:3)

听起来你想要反转数组,而不是操纵数组中任何多字节类型的字节序。标准库有一个解决方案:

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