【问题标题】:convert QBytearray to QBitarray将 QBytearray 转换为 QBitarray
【发布时间】:2016-11-04 17:31:39
【问题描述】:

如何将 QBytearray 转换为 QBitarray? Qt 手册是这样说的:

for(int i=0; i<8; ++i) {
    for(int b=0; b<byteArray.count();b++) {
        bits.setBit( i*8+b, byteArray.at(i)&(1<<(7-b)) );
    }

但这会导致运行时错误。 有没有更好的方法来做到这一点?

【问题讨论】:

    标签: arrays qt qbytearray


    【解决方案1】:

    这个循环看起来很奇怪,它使用 i 来索引字节数组,它达到 8,但 byteArray 可能没有 8 个元素。只需切换循环限制即可:

    for(int i = 0; i < byteArray.count(); ++i) {
      for(int b = 0; b < 8; b++) {
        bits.setBit( i * 8 + b, byteArray.at(i) & (1 << (7 - b)) );
    }
    

    【讨论】:

    • 谢谢,请问如何将 uint16 转换为 qbitarray?
    • @BastiAn,QBitArray 有点用词不当,不容易流式传输;你最好选择不同的班级。
    【解决方案2】:

    我们将地图硬编码为 ex m_binaryMap.insert("A","1010");

    QBitArray returnBitAr(const QByteArray &dataTOconvert)
        {
            QBitArray bitAr;
            int count = 0;
            bitAr.resize(4*dataTOconvert.length());
            QString byteData = dataTOconvert.data();
            for(int i = 0; i< dataTOconvert.length(); i++){
                QString value =  m_binaryMap.value(byteData.at(i));
                for(int j = 0; j< value.length(); j++){
                    if(value.at(j) == "1"){
                        bitAr.setBit(count);
                    }
                    ++count;
                }
            }
            return bitAr;
        }
    

    【讨论】:

      【解决方案3】:

      要转换的变体看起来更好:

      QByteArray -> QBitArray

      QByteArray bytes = ...;
      
      // Create a bit array of the appropriate size
      QBitArray bits(bytes.count()*8);
       
      // Convert from QByteArray to QBitArray
      for(int i=0; i<bytes.count(); ++i)
          for(int b=0; b<8; ++b)
              bits.setBit(i*8+b, bytes.at(i)&(1<<b));
      

      QBitArray -> QByteArray

      QBitArray bits = ...;
       
      // Resulting byte array
      QByteArray bytes;
       
      // Convert from QBitArray to QByteArray
      for(int b=0; b<bits.count(); ++b)
          bytes[b/8] = (bytes.at(b/8) | ((bits[b]?1:0)<<(b%8)));
      

      【讨论】:

        猜你喜欢
        • 2012-02-03
        • 2012-02-05
        • 2013-12-25
        • 2020-09-18
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        相关资源
        最近更新 更多