Bitshifting QBytearray?

时间:2014-02-10 14:14:20

标签: qt bit-manipulation bit qbytearray

我正在寻找一种方法来换取QByteArray

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

我需要实现的是通过位移来statusByte0x20。由于我不能直接对QByteArray进行位移,实现转换的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

如果您只想从一个字节的十六进制表示中获取单个数字(字节)值,而不是多个字节,则实际上不需要字节数组。

#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

如果你需要一次移位多个字节,当然也可以 - 请修改你的问题以明确这一点。

答案 1 :(得分:1)

当你谈论单字节时,位移不是问题,这是微不足道的(我不知道为什么你声称它是不可能的)。

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

如果你有多个字节,那就更复杂了!

  1. 端!如何定义最旧位应移位的位置,下一个字节或previos字节?
  2. 数组结束时会发生什么?数据松散,还是扩展数组?