我正在寻找一种方法来sbitshift QByteArray
。移位QBytearray?
QByteArray statusByte = QByteArray::fromHex("40"); // 0100 0000
什么,我需要做到的,是通过位移获得statusByte
到0x20
。由于我无法直接位移QByteArray
,实现这种转变最简单的方法是什么?
我正在寻找一种方法来sbitshift QByteArray
。移位QBytearray?
QByteArray statusByte = QByteArray::fromHex("40"); // 0100 0000
什么,我需要做到的,是通过位移获得statusByte
到0x20
。由于我无法直接位移QByteArray
,实现这种转变最简单的方法是什么?
当你谈论单字节时,位移并不是问题,这是微不足道的(我不知道你为什么声称它是不可能的)。
QByteArray statusByte = QByteArray::fromHex("40");
statusByte[0] = statusByte[0]>>1;
statusByte[0]>>=1; // this should also work
如果你有多个字节,那么它会更复杂!
如果您只想从一个字节的十六进制表示中获取单个数字(字节)值,而不是多个字节,则不需要字节数组。
#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
如果需要位移位多个字节一次,当然它也有可能 - 请修改你的问题说清楚。