2014-02-10 2 views
0

나는 QByteArray을 sbitshift하는 방법을 찾고 있습니다.Bitshifting QBytearray?

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

은 무엇 내가 달성하기 위해 필요한 것은 비트 이동에 의해 0x20statusByte를 얻는 것입니다. QByteArray을 직접 비트 시프트 할 수 없으므로 시프트를 달성하는 가장 간단한 방법은 무엇입니까?

답변

1

싱글 바이트에 대해 이야기 할 때 비트 시프트는 문제가되지 않습니다. 이것은 사소한 일입니다. 왜 당신이 불가능하다고 주장하는지 모르겠습니다.

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

여러 바이트가있는 경우 더 복잡합니다.

  1. 엔디안! 가장 오래된 비트가 다음 바이트 또는 previos 바이트로 이동해야하는 위치를 어떻게 정의합니까?
  2. 배열이 끝날 때 어떻게해야합니까? 느슨한 데이터 또는 배열 확장?
1

여러 바이트가 아닌 1 바이트의 16 진수 표현에서 하나의 숫자 (바이트) 값만 가져 오려면 실제로는 바이트 배열이 필요하지 않습니다.

#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 

여러 바이트를 한 번에 비트 시프트해야하는 경우 물론 가능합니다. 명확하게 질문을 수정하십시오.