将 QByteArray 从大端转换为小端

问题描述 投票:0回答:2

我觉得我有点不知所措。我尝试了这么简单的事情,我不敢相信没有任何内置的 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 框架中有任何内置的东西吗?我没有找到。到目前为止我尝试了什么

// 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 或谷歌上找不到任何有用的东西,或者可能问了错误的问题......

c++ qt endianness qbytearray
2个回答
10
投票

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

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

0
投票

标准库有解决方案

不,不是这样的

我得到的 QByteArray 值为 2a000000 但必须是 0000002a

当我执行 std::reverse(arr.begin(), arr.end()); 时

变成了000000a2,甚至没有意义

© www.soinside.com 2019 - 2024. All rights reserved.