当前位置: 首页 > 知识库问答 >
问题:

有符号字节和无符号字节之间的自动转换?

滕令雪
2023-03-14

我正在与Scribbler2机器人和Fluke2板工作,并通过Java中的Myro与Fluke沟通。Fluke board是Scribbler和用Java编写的桌面客户端之间的蓝牙通信桥梁。它通过一个RS232串口与涂写器通信。

这可能是一个愚蠢的问题,上面的系统很复杂,所以如果我不能很好地解释这一点,请原谅我。

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

我的问题的要点是:如果我从Java发送162,它将显示为-94(在我的控制台中看到这个'print')。自旋固件会因为一个字节就是一个字节而将其视为162,还是将其视为其他东西?

我知道自旋代码正在为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])

共有1个答案

姚昊焱
2023-03-14

字节是8位,仅此而已。它本身不是签名或未签名的。正是算术运算产生了差异--仅仅因为有不同的算术运算。所以Java只有带符号的整数操作,而C两者都有。当一个字节通过RS232发送时,它没有任何操作。所以不要担心,您的字节不会被Java破坏。

 类似资料:
  • 问题内容: 在Java中,是否有一种简单而优雅的方法将无符号字节值转换为有符号字节值?例如,如果我所拥有的只是int值240(二进制(24位+ 11110000)= 32bits),如何获得该int的带符号值? 问题答案: 除了,Java没有其他无符号值。考虑以下代码段: 结果将为-1,因为最低的8位已复制到byte变量中。

  • 问题内容: 我需要使用无符号字节数组。我需要通过网络将某些字符发送到服务器,其中一些字符大于127。 我有下面的代码的简化版本,以尝试理解该概念: 这给出了以下输出: 我需要打印160。由于服务器期望一个160的字节,并且如果它接收到-96,则它不接受该值。我使用int的原因是,当我阅读如何解决该问题时,我经常碰到使用int的建议,但是我不太理解,因为我需要数组为byte类型。 这是我发送数组的代

  • 问题内容: 我在C#中有一个应用程序,它使用RijndaelManaged 加密 部分文件 (因为它们是大文件)。因此,我将文件转换为字节数组并仅对其一部分进行加密。 然后,我想使用Java解密文件。因此,我只需要解密用C#加密 的文件的一部分 (意味着那些字节)。 问题来了。因为在C#中,我们 有无符号字节 ,在Java中,我们有 符号字节 。因此,我的加密和解密无法按照我想要的方式工作。 在C

  • 问题内容: Java中的字节默认为带符号的。我在其他帖子上看到具有无符号字节的解决方法类似于以下内容: 有人可以向我解释为什么这样做有效,并将有符号字节转换为无符号字节,然后将其转换为整数吗?具有11111111的字节导致相同的字节-对吗? 问题答案: 类型转换的优先级高于运算符。因此,您首先要转换为一个int,然后再进行ANDing以掩盖所有已设置的高阶位,包括java所用的二进制补码表示法的“

  • 问题内容: 我必须将字节转换为有符号/无符号int或short。 下面的方法正确吗?哪个是签名的,哪个是未签名的? 字节顺序:LITTLE_ENDIAN VS。 和 VS。 我 只 对这种转换形式感兴趣。谢谢! 问题答案: 每对中的第一个方法()是带符号的,第二个()是无符号的。 但是,Java 始终是带符号的,因此,如果设置的最高位,则即使将其视为“无符号”版本,其结果也将为负。 假设值是-1或

  • 我在写JNI。在这种情况下,我的Java程序使用ByteOutputStream()获取一个图像字节数组,然后用这个数组调用C中的一个函数,将字节数组转换为无符号char*。代码如下: 在这一点上,当我编译时,我不断收到警告: 警告:使用“jbyte *”类型的表达式(也称为“signed char *”)初始化“unsigned char *”会在指向具有不同符号[-Wpointer-sign]