1

我正在使用Scribbler 2 机器人Fluke 2板,并通过Java 中的 Myro与 Fluke 进行通信。Fluke 板是 Scribbler 和用 Java 编写的桌面客户端之间的蓝牙通信桥梁。它通过 RS232 串行端口与 Scribler 通信。

这可能是一个愚蠢的问题,上面的系统很复杂,如果我解释得不好,请多多包涵。

我的问题的背景: Java 使用有符号字节。Fluke(我认为)是用 C 语言编写的,因此使用无符号字节。Scribbler 上的固件是用Spin编写的,它也使用无符号字节。Scribbler 固件的一些命令字节码使用大于 127 的值,因此当它们从我的 Java 客户端发送时,它们会作为负数发送。机器人没有响应这些 > 127 个命令,我试图了解原因。

我的问题的要点:如果我从 Java 发送 162,它会显示为 -94(在我的控制台中用“打印”看到这个)。Spin 固件会将其视为 162,因为一个字节就是一个字节,还是会将其视为其他内容?

我知道 Spin 代码正在对参数进行一些位移,以移动命令,可能大于 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])
4

1 回答 1

2

字节是 8 位,仅此而已。它本身没有签名或未签名。不同的是算术运算——仅仅因为有不同的算术运算。所以Java只有带符号的整数运算,而C有。当一个字节通过 RS232 发送时,它没有任何操作。所以不用担心,你的字节不会被 Java 破坏。

于 2012-11-23T18:32:37.620 回答