c++ - 获取qint64的最高有效字节

标签 c++ qt

在 QT 中我有一个 qint64。有没有一种简单的方法可以将其分成大小为 int8_t 的片段?

为了清楚起见,如果我有一个

qint64 a = [11001000 00001111 11110000 ... 11001100] 

我想得到

int8_t a1=[11001000] 
int8_t a2=[00001111]
int8_t a3=[11110000] 
... 
int8_t a8=[11001100]

最佳答案

与 Qt 相比,这更像是 C/C++ 问题。但无论如何:

qint64 a = 56747234992934;
union {
    qint64 i64;
    int8_t i8[8];
} u = {a};
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
qDebug() << u.i8[0]; // MSB is the first byte on big endian machines
#else
qDebug() << u.i8[7]; // MSB is the last byte on little endian machines
#endif

编辑:为了避免乱七八糟的字节序特定位置代码:

qint64 a = 56747234992934;
union {
    qint64 i64;
    int8_t i8[8];
} u = {qToBigEndian(a)};
qDebug() << u.i8[0]; // MSB is the first byte on big endian machines

请注意,您需要包含 qendian.h 才能正常工作。

关于c++ - 获取qint64的最高有效字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347186/

相关文章:

c++ - Boost、Lib C++ 和 Xcode

c++ - 在 Flutter 应用程序中使用来自 Android NDK 的 AssetManager 类

Qt:通过项目文件创建目录

c++ - 为什么不管路径对不对都一直连着

c++ - 符号转换发生在哪里?

c++ - 为什么不允许仅对一个 ref-qualifier 进行重载?

C++ 常见的算术转换不转换

c++ - 如何读取QTcpSocket中的完整数据?

c++ - 在 Qt 中获取父布局

c++ - 为什么QTextDocument背景颜色仅更改一次?