QSerialPort :: write () — только подписанные значения? (127 десятичных максимум)? Мне нужно отправить 0xFF (255 декабря)

Вот то, чего я не ожидал. Мне нужно написать небольшое приложение, которое отправляет значения через последовательный порт, но значения превышают 127. После просмотра документации по Qt здесь: http://qt-project.org/doc/qt-5.1/qtserialport/qserialport.html — если я не пропустил что-то очевидное, метод QSerialPort :: write (), похоже, не поддерживает ничего выше 127 (десятичное).

Мне, например, случается, что мне нужно отправить 0xFF (255 десятичное число), так как я могу отправить это, когда кажется, что методы поддерживают только «подписанные» символы (опять же, если я что-то не упустил). Я искал версию методов write (), которые принимают «int» или неподписанный символ, который позволил бы мне идти до 255 в десятичном виде.

virtual qint64  writeData(const char * data, qint64 maxSize)

Видите, нет «unsigned char *» и нет «int», так как мне отправить массив из 5 значений, где каждое из них выше 127 (dec)?

1

Решение

Он отправляет данные как есть, а подписанный или неподписанный является проблемой интерпретации другой стороны.
-1 подписанный байт равен 0xff, так же, как 255 без знака.

1

Другие решения

Вы все еще можете отправлять байты со значениями выше 127.
Тип char со знаком просто означает, что ваши данные передаются методу в виде массива знаков со знаком (так что f.e unsigned 250 равен подписанному -6, но двоичные оба равны 250).

char * ptr = новый символ [5]; ptr [0] = 255; ShowMessage ((INT) PTR [0]);

С начала:

Прежде всего, проверьте эту статью вики: http://en.wikipedia.org/wiki/Two‘s_complement (фокус на 8-битной таблице целых чисел с двумя дополнительными числами)

Код дополнения 2 — это способ записи отрицательных значений в память вашего компьютера.

Сейчас:

Значение 255 в двоичном коде записывается как 1111 1111.
Значение -1 в коде дополнения 2 также записывается как 1111 1111.

Таким образом, тип без знака или со знаком, говорит вашему компилятору, как по рукам с этими значениями (как со знаком, так и без знака).

Теперь, что происходит, когда вы пытаетесь преобразовать char или unsigned char в integer.

Теперь конвертируем unsigned char в int:
Ваш компилятор лечит 1111 1111 как 255 и преобразовать его в 255 целое число.

Теперь конвертируем char в int:
Ваш компилятор лечит 1111 1111 как -1 и преобразовать его в -1 целое число.

Целое число -1 имеет двоичный код, отличный от значения -1 символа (из-за знакового бита).

1

По вопросам рекламы [email protected]