Получение значения байта от символа - PullRequest
1 голос
/ 16 января 2011

Это просто, но у меня проблема с этим. http://www.ipix.lt/images/90928843.png Я хочу использовать буфер [5]. Но не значение символа, а 255. Попытка приведения типов к типу int или byte, но при этом получается -1.

Ответы [ 3 ]

4 голосов
/ 16 января 2011

Правильно, что, приведя его к int, вы получите -1, потому что char в вашей реализации является типом со знаком (на самом деле он определяется реализацией, если char является подписанным или без знака, и обычно вы можете изменить его в параметры компилятора); в окне отладчика вы видите его беззнаковое представление.

Чтобы получить его беззнаковое значение, вы должны сначала привести его к unsigned char, а затем к unsigned int (я думаю, что вы могли бы просто уйти, просто приведя к unsigned int, но я не уверен).

--- EDIT ---

На самом деле в окне отладчика я вижу его тип как unsigned char, поэтому первая часть моего ответа может не применяться ... вы должны сказать нам, как определяется этот буфер.

1 голос
/ 16 января 2011

Как определяется byte? C ++ не знает такого типа.

Вы можете разыграть int, однако:

static_cast<int>(msg.buffer[i + 2]) …

Обратите внимание на использование static_cast вместо устаревших приведений в стиле C. Всегда используйте первое, а не второе. Для объяснения причин см. Вопрос о Синтаксический стиль C ++ cast .

(Кроме того, Маттео прав в том, что вам нужно сначала привести к беззнаковому значению.)

0 голосов
/ 16 января 2011

Использование stringstream (http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/) было бы одним из жизнеспособных решений - преобразование байта (который, я думаю, просто беззнаковый символ) в целое число, хранящееся как строка.

...