2013-04-04 2 views
1

Я пишу для Arduino, и я использую протокол I²C. Когда Wire.read() возвращает int, что это за int? Подписан или не подписан?Wire.read return signed или unsigned value

На официальном сайте Arduino говорится, что он возвращает байт. Поэтому я думаю, что это неподписанное, потому что они не говорят sbyte или подписанный байт. Если регистр, который я прочитал с Wire.read(), имеет значения (подписанные), которые сохраняются с помощью метода two's complement, как это может быть Wire.read()?

Всегда ли подписанное значение возврата? Или это зависит?

Кроме того, считывая и печатая значение, я получаю отрицательные числа, так что это означает, что wire.read() возвращает подписанный int.

+2

'byte' неподписан по определению: его значение равно 0-255. – angelatlarge

+0

Благодарю вас, я закрепил это, но значение регистра, которое я прочитал, дает мне отрицательное число с Serial.print (_the_value_) – kyrpav

+1

'read()' возвращает значение со знаком, если оно успешно возвращает количество байтов, если оно не по какой-либо причине возвращается - 1 –

ответ

0

Всегда ли возвращение?

Технически, да. Wire.read() возвращает подписанный int. Тем не менее, фактическое значение должно быть 0-255 (например, беззнаковый байт), или, как говорит Grijesh, если чтение не выполняется, оно возвращает -1.

Если регистр, который я прочитал с помощью Wire.read(), имеет значения (подписанные), которые сохраняются с помощью метода дополнений двух, как это может сделать Wire.read()?

Я понимаю, что протокол I²C отправляет 8-битные байты. У него нет концепции подписанного или неподписанного. Если устройство, с которым вы общаетесь, отправляет два значащих знака дополнений, это может быть так же просто, как лить результаты чтения в тип char.

Например,

int r; 
char c; 
r = Wire.read(); 
if (r != -1) { 
    c = char(r); 
} 

Обратите внимание, что вам нужно проверить, если возвращаемое значение -1 перед заливкой на символ. В противном случае вы не можете определить, была ли ошибка или если чтение байта было фактически равным -1.