我正在与Scribbler 2 robot和Fluke 2委员会合作,并通过Myro in Java与Fluke沟通。 Fluke板是Scribbler和用Java编写的桌面客户端之间的蓝牙通信桥。它通过RS232串口与Scribbler进行通信。
这可能是一个愚蠢的问题,而且上述系统很复杂,如果我不解释这个问题,请耐心等待。
我的问题的背景: Java使用带符号的字节。 Fluke(我认为)用C语言编写,因此使用无符号字节。 Scribbler上的固件是用Spin编写的,它也使用无符号字节。 Scribbler固件的某些命令字节码使用大于127的值,因此当它们从我的Java客户端发送时,它们将作为负数发送。机器人没有响应这些> 127命令,我试图理解为什么。
我的问题的要点:如果我从Java发送162它显示为-94(在我的控制台中看到这个'print')。 Spin固件会将此视为162,因为一个字节是一个字节,还是会将其视为其他字节?
我知道Spin代码正在为 params 做一些移位命令,移动命令可能大于255,但它并没有针对特定命令执行此操作。
pub Move | x_coord, y_coord
' 0 1 2 3 4 5
'Format 162 type hXByte lXByte hYByte lYByte
' type := indata[1]
x_coord := (indata[2]<<8 | indata[3])
y_coord := (indata[4]<<8 | indata[5])
答案 0 :(得分:2)
字节是8位,仅此而已。它本身没有签名或未签名。算术运算有所不同 - 仅仅因为有不同的算术运算。所以Java只签署了整数运算,而C只有两者。当一个字节通过RS232发送时,它没有任何操作。所以不要担心,你的字节不会被Java破坏。