QByteArray
- массив из char
с. По-видимому, char
на вашей платформе подписан и 8-битный. Таким образом, ваша проблема может быть дистиллированным, чтобы:
char c = 0x80;
quint32 = c << 8;
Стандартных мандаты, что:
N4606 § 4.8 [conv.integral]/3
Если подписан типа назначения, значение не изменяется, если он может быть , представленный в типе назначения; в противном случае значение равно .
В этом случае (как обычно на 2 в системах комплемента), 0x80
отображается в std::numeric_limits<char>::min()
== -128
, что логично, поскольку они имеют один и тот же базовый битовый шаблон.
В настоящее время -128 << 8
определяется как -128 * 2 , что составляет -32768.
Наконец, преобразование из -32768
до 32 битового целого числа без знака хорошо определены и выходы 4294934528
Я закончил с использованием 'QDataStream' для преобразования. В случае, если кто-то заинтересован. – Barracuda