Wire.read返回有符号或无符号值

时间:2013-04-04 19:06:03

标签: c types return arduino i2c

我正在为Arduino写作,我使用I²C协议。当Wire.read()返回一个int时,这个int是什么?是签名还是未签名?

在Arduino官方网站上,它说它返回一个字节。所以我认为它是无符号的,因为它们没有说sbyte或signed byte。如果我使用Wire.read()读取的寄存器具有使用two's complement方法保存的值(已签名),Wire.read()如何理解它?

返回值是否始终签名?还是依赖?

此外,通过读取和打印值,我得到负数,这意味着wire.read()返回一个带符号的int。

1 个答案:

答案 0 :(得分:0)

  

回报总是签名吗?

技术上,是的。 Wire.read()返回一个signed 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);
}

请注意,在转换为char之前,需要检查返回值是否为-1。否则,您无法判断是否存在错误或读取的字节实际为-1。