在Qt中解析Asterix,为什么我需要类型转换?

时间:2016-03-15 08:28:46

标签: c++ qt parsing type-conversion

我目前正在为Asterix Cat 240(传输雷达视频数据的开放标准)编写一个解析器,它工作得很好,但我不知道,为什么我需要进行类型转换?

rawAsterix.videoHR = static_cast<quint8>(buffer->at(i));
rawAsterix.videoHR = (rawAsterix.videoHR << 8) + static_cast<quint8>(buffer->at(i+1));
rawAsterix.videoHR = (rawAsterix.videoHR << 8) + static_cast<quint8>(buffer->at(i+2));
rawAsterix.videoHR = (rawAsterix.videoHR << 8) + static_cast<quint8>(buffer->at(i+3));
i+=4

缓冲区为QByteArray,保存QUdpSocket收到的数据。 起初,我没有在奇怪的行为中产生类型转换(有时不是每次)。为什么会这样?

1 个答案:

答案 0 :(得分:2)

QByteArray::at()返回char。此char的static_cast<quint8>返回unsigned char。看来在这段代码中你需要无符号值。

实际上,标准没有指定普通char是签名还是未签名(请参阅Is char signed or unsigned by default?)。但是,如果您需要确保添加无符号值,则需要在此使用static_cast<quint8>