2014-02-10 32 views
0

我正在尋找一種方法來sbitshift QByteArray移位QBytearray?

QByteArray statusByte = QByteArray::fromHex("40"); // 0100 0000 

什麼,我需要做到的,是通過位移獲得statusByte0x20。由於我無法直接位移QByteArray,實現這種轉變最簡單的方法是什麼?

回答

1

當你談論單字節時,位移並不是問題,這是微不足道的(我不知道你爲什麼聲稱它是不可能的)。

QByteArray statusByte = QByteArray::fromHex("40"); 
statusByte[0] = statusByte[0]>>1; 
statusByte[0]>>=1; // this should also work 

如果你有多個字節,那麼它會更復雜!

  1. endian!你如何定義最舊的位應該移到哪裏,到下一個字節還是前一個字節?
  2. 數組結束時會發生什麼?數據鬆散或擴展數組?
1

如果您只想從一個字節的十六進制表示中獲取單個數字(字節)值,而不是多個字節,則不需要字節數組。

#if 1 
    // Qt 5, C++11 compilers 
    quint8 byte = QStringLiteral("40").toInt(nullptr, 16); 
#endif 
#if 0 
    // Qt 5, pre-C++11 compilers 
    quint8 byte = QStringLiteral("40").toInt(NULL, 16); 
#endif 
#if 0 
    // Qt 4 
    quint8 byte = QByteArray("40").toInt(NULL, 16); 
#endif 
byte >>= 1; 
Q_ASSERT(byte == 0x20); // this is for demonstration only 

如果需要位移位多個字節一次,當然它也有可能 - 請修改你的問題說清楚。