c++ - 将 QByteArray 从大端转换为小端

标签 c++ qt endianness qbytearray

我觉得我有点不知所措。我尝试了这么简单的事情,我不敢相信没有内置 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 或谷歌上找不到任何有用的信息,或者可能问错了问题...

最佳答案

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

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

关于c++ - 将 QByteArray 从大端转换为小端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50257210/

相关文章:

c++ - 如何将 Wchar_t* 转换为 const char*

c++ - 在 C 中的 fwrite 上检测光盘移除

c++ - QMediaPlayer 资源错误

c - 大端系统上的地址运算符

c++ - 使文件问题 : always spits out "Nothing to be done for ` make. w'。”

c++ - 在C++中创建一个没有名字的对象

c++ - 用于散点图的排序浮点 vector (C++/QCustomPlot)

qt - 如何使用 QPainter 绘制和填充三角形?

c - 字节顺序是否反转数组?

c++ - 测试 C++ 代码的字节序无关性