Qt QByteArray тип данных без знака - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно отправить данные через rs232, но я столкнулся с проблемой.
Когда я посылаю байт, представляющий целое число больше 128, похоже, что QByteArray изменяет содержимое, которое я ему передаю:

uchar uc_array[]={0x41,0xAA}; //65 170
QByteArray qb_array = QByteArray();
qb_array.append(uc_array[0]);
qb_array.append(uc_array[1]);
cout<<(uint)qb_array[0]<<endl //65
cout<<(uint)qb_array[1]<<endl //4294967210

Почему

 cout<<(uint)qb_array[1]<<endl

не печатает 170, а вместо 4294967210?

1 Ответ

0 голосов
/ 27 апреля 2018

Вот мое объяснение, почему вы печатаете 4294967210 вместо 170, что является вашим первоначальным вопросом:

  1. qb_array[1] возвращает тип signed char со значением 0xAA
  2. Когда вы разыгрываете signed char на uint тип:
    • значение сначала повышается до типа int, сохраняя знак: оно становится 0xFFFFFFAA
    • тогда он интерпретируется как неподписанный, поэтому 4294967210 в десятичном формате.
  3. Печать этого значения в десятичном формате дает 4294967210.
...