QT 字节大小端转序方法
在Qt中,可以使用qToLittleEndian和qToBigEndian两个函数来实现大小端字节序之间的转换。
1.转换为小端字节序:
1 quint32 num = 0x12345678; 2 quint32 littleEndianNum = qToLittleEndian(num); // 转换为小端字节序
2.转换为大端字节序:
1 quint32 num = 0x12345678; 2 quint32 bigEndianNum = qToBigEndian(num); // 转换为大端字节序
这两个函数可以用于各种整型数据类型,如quint8、quint16、quint32、quint64等。通过这些函数,可以方便地进行大小端字节序之间的转换。
3、qToBigEndian方法
uchar temp[2] = {0};
QByteArray byteArray;
byteArray.clear();
int iModeType = 0xFF01;
qToBigEndian<quint16>(stRunModePath.iModeType, temp);
byteArray.append(reinterpret_cast<char*>(temp), 2);
uint16_t *pData = (uint16_t*)byteArray.data();
4、具体库函数参考查询
template <typename T> inline Q_DECL_CONSTEXPR T qToBigEndian(T source)
{ return qbswap(source); }
template <typename T> inline Q_DECL_CONSTEXPR T qFromBigEndian(T source)
{ return qbswap(source); }
template <typename T> inline Q_DECL_CONSTEXPR T qToLittleEndian(T source)
{ return source; }
template <typename T> inline Q_DECL_CONSTEXPR T qFromLittleEndian(T source)
{ return source; }
template <typename T> inline void qToBigEndian(T src, void *dest)
{ qbswap<T>(src, dest); }
template <typename T> inline void qToLittleEndian(T src, void *dest)
{ qToUnaligned<T>(src, dest); }
template <typename T> inline void qToBigEndian(const void *source, qsizetype count, void *dest)
{ qbswap<sizeof(T)>(source, count, dest); }
template <typename T> inline void qToLittleEndian(const void *source, qsizetype count, void *dest)
{ if (source != dest) memcpy(dest, source, count * sizeof(T)); }
template <typename T> inline void qFromBigEndian(const void *source, qsizetype count, void *dest)
{ qbswap<sizeof(T)>(source, count, dest); }
template <typename T> inline void qFromLittleEndian(const void *source, qsizetype count, void *dest)
{ if (source != dest) memcpy(dest, source, count * sizeof(T)); }