1

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

在 Arduino 官方网站上,它说它返回一个字节。所以我认为它是无符号的,因为他们没有说 sbyte 或有符号的字节。如果我读取的寄存器有用二进制补码Wire.read()方法保存的值(有符号),怎么能理解呢?Wire.read()

返回值是否总是有符号的?还是取决于?

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

4

1 回答 1

0

退货总是签名吗?

从技术上讲,是的。Wire.read() 返回一个有符号整数。但是,实际值应该是 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。

于 2013-04-05T14:31:40.593 回答