Java中没有无符号字节的生活

时间:2019-04-27 09:29:01

标签: java byte

我需要将一组字节写入TCP套接字:

byte[] b = {0x40,0x88,0xFF};
socket.getOutputStream().write( b ) ;

但是在Java中,这里没有未签名的字节,所以byte []初始化失败。如何用Java将3个字节写入套接字?

1 个答案:

答案 0 :(得分:1)

签名只是一个概念。在引擎盖下,byte(有符号或无符号)仅为8位。用0xFF,您可能是指1111 1111位。用二进制补码解释时的1111 1111是什么? -1!

因此,您应将0xFF替换为-1

类似地,0x88是1000 1000,即二进制补码为-120。

所以您可以这样写字节数组:

byte[] b = {0x40,-120,-1};

实际上,转换为byte会为您完成此转换:

byte[] b = {0x40,(byte)0x88,(byte)0xFF};