【问题标题】:Bitshifting QBytearray?位移QBytearray?
【发布时间】:2014-03-07 22:06:10
【问题描述】:

我正在寻找一种方法来对QByteArray 进行 sbitshift。

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

我需要实现的是通过位移将statusByte 变为0x20。由于我不能直接对QByteArray 进行位移,实现位移的最简单方法是什么?

【问题讨论】:

    标签: qt bit-manipulation bit qbytearray


    【解决方案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
    

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-09
        • 2020-12-08
        • 2014-11-06
        • 2013-12-25
        • 2018-02-25
        • 2013-11-16
        • 2023-03-24
        • 2016-08-19
        • 2012-12-17
        相关资源
        最近更新 更多