2014-02-10 31 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 

如果需要位移位多个字节一次,当然它也有可能 - 请修改你的问题说清楚。