我需要使用无符号字节数组。我需要通过网络将某些字符发送到服务器,其中一些字符大于127。
我有下面的代码的简化版本,以尝试理解该概念:
int i= 160;
byte j = (byte) i;
System.out.println((byte)i);
System.out.println(j);
这给出了以下输出: -96
-96
我需要打印160。由于服务器期望一个160的字节,并且如果它接收到-96,则它不接受该值。我使用int的原因是,当我阅读如何解决该问题时,我经常碰到使用int的建议,但是我不太理解,因为我需要数组为byte类型。
这是我发送数组的代码的一部分:
public boolean send(byte[] data) {
try {
out.write(data); // Write the data to the outStream
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false; // Return false if the TCP Transmit failed
// }
return false;
}
如果有人可以帮助我,我将不胜感激。
Java中有符号和无符号字节之间没有区别。以下两个都将为字节分配相同的值:
byte i = (byte)160;
byte j = (byte)-96;
作为开发人员,由您决定将它们打印时视为已签名还是未签名。默认设置是将它们打印为带符号,但是您可以通过以无符号方式将它们转换为整数来强制将它们打印为无符号。
System.out.println(i); // -96
System.out.println(0xff&i); // 160
如果您想知道字节如何同时表示负数和正数,请阅读有关Java的二进制补码算法的文章。
问题内容: Java中的字节默认为带符号的。我在其他帖子上看到具有无符号字节的解决方法类似于以下内容: 有人可以向我解释为什么这样做有效,并将有符号字节转换为无符号字节,然后将其转换为整数吗?具有11111111的字节导致相同的字节-对吗? 问题答案: 类型转换的优先级高于运算符。因此,您首先要转换为一个int,然后再进行ANDing以掩盖所有已设置的高阶位,包括java所用的二进制补码表示法的“
问题内容: 我想了解如何将带符号的数字转换为无符号的数字。 可以说我有这个: 为了使其无符号,我必须选择“更大”的数据类型“ short”,并应用值为0x00ff的AND运算符。 为什么使数字无符号? 问题答案: Java实际上没有无符号原语。 值127实际上由“ 01111111”表示,第一位是符号(0为正)。 一个无符号字节将能够保存0到255的值,但是127是有符号字节的最大值。由于一个字节
问题内容: 我在C#中有一个应用程序,它使用RijndaelManaged 加密 部分文件 (因为它们是大文件)。因此,我将文件转换为字节数组并仅对其一部分进行加密。 然后,我想使用Java解密文件。因此,我只需要解密用C#加密 的文件的一部分 (意味着那些字节)。 问题来了。因为在C#中,我们 有无符号字节 ,在Java中,我们有 符号字节 。因此,我的加密和解密无法按照我想要的方式工作。 在C
我正在与Scribbler2机器人和Fluke2板工作,并通过Java中的Myro与Fluke沟通。Fluke board是Scribbler和用Java编写的桌面客户端之间的蓝牙通信桥梁。它通过一个RS232串口与涂写器通信。 这可能是一个愚蠢的问题,上面的系统很复杂,所以如果我不能很好地解释这一点,请原谅我。 我的问题的背景:Java使用有符号字节。Fluke是(我想)用C写的,所以使用了无符
问题内容: 关于Java支持哪种无符号数据类型,我有些困惑。 我已经读过了,但我不理解它的非常复杂的解释(至少对我而言)。 问题答案: Java仅支持带符号的类型(除外),因为它假定对于初学者来说,一种类型比每种大小都具有两种类型更容易理解。在C语言中,它被认为是错误的根源,因此不包括对无符号类型的支持。 因此设计师选择了四种尺寸 ,8位 ,16位 ,32位 ,64位。 并保持一致性,他们都签署就
问题内容: 在Java中,是否有一种简单而优雅的方法将无符号字节值转换为有符号字节值?例如,如果我所拥有的只是int值240(二进制(24位+ 11110000)= 32bits),如何获得该int的带符号值? 问题答案: 除了,Java没有其他无符号值。考虑以下代码段: 结果将为-1,因为最低的8位已复制到byte变量中。