linux下qt不能使用quint32,Qt的quint32小字节序与QDataStream

我使用QDatastream来填充从一的QByteArray quint32阵列的小端ARM的机上象下面这样:Qt的quint32小字节序与QDataStream

// Modify the header

QByteArray header = QByteArray::fromRawData((const char*)dataPtr,HEADER_SIZE);

QDataStream dataStream(header);

dataStream.setByteOrder(QDataStream::LittleEndian);

quint32 headerBuffer[NUMBER_HEADER_ENTRIES];

int bufferCnt = 0;

while (!dataStream.atEnd()) {

// Pop off a 32 bit int

quint32 temp;

dataStream >> temp;

// insert into buffer

headerBuffer[bufferCnt] = temp;

// Increment counter

bufferCnt++;

}

问题是与字节顺序。我需要获取headerBuffer [113]中的32位字段的最后4位,所以我尝试使用0xf与headerBuffer中的条目进行AND。要检查此字段的预期值是“3”。但是,这个AND操作给了我“a”,如下所示。如果我交换字节以使条目为“0x1a13 & 0x000f”,那么我得到“3”。您可以在下面看到其他一些预期值的示例,而不是我所看到的。所以,我将QDataStream的ByteOrder设置为LittleEndian,但仍然没有得到期望的结果。我究竟做错了什么?我怎样才能得到0x1a13而不是0x131a?谢谢!

qDebug() << "ONE: " << QString("%1").arg(headerBuffer[0], 0, 16); // This prints: 494d0152 -- Should be: 4d495201

qDebug() << "TWO: " << QString("%1").arg(headerBuffer[1], 0, 16); // This prints: 5400 -- Should be: 54

qDebug() << "THREE: " << QString("%1").arg(headerBuffer[113] & 0x000f, 0, 16); // This prints: a -- Should be: 3 (headerBuffer[113] is always 0x131a)

qDebug() << "FOUR: " << QString("%1").arg(0x1a13 & 0x000f, 0, 16); // This prints: 3 -- Should be: 3

2013-03-18

PhilBot

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值