我目前正在为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
收到的数据。
起初,我没有在奇怪的行为中产生类型转换(有时不是每次)。为什么会这样?
答案 0 :(得分:2)
QByteArray::at()
返回char
。此char的static_cast<quint8>
返回unsigned char
。看来在这段代码中你需要无符号值。
实际上,标准没有指定普通char
是签名还是未签名(请参阅Is char signed or unsigned by default?)。但是,如果您需要确保添加无符号值,则需要在此使用static_cast<quint8>
。