我正在为Arduino写作,我使用I²C协议。当Wire.read()
返回一个int时,这个int是什么?是签名还是未签名?
在Arduino官方网站上,它说它返回一个字节。所以我认为它是无符号的,因为它们没有说sbyte或signed byte。如果我使用Wire.read()
读取的寄存器具有使用two's complement方法保存的值(已签名),Wire.read()
如何理解它?
返回值是否始终签名?还是依赖?
此外,通过读取和打印值,我得到负数,这意味着wire.read()
返回一个带符号的int。
答案 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。