This question already has answers here:
Can we make unsigned byte in Java
(15个答案)
5年前关闭。
我有一个字节数组:
我已经添加了一些字节。对于此示例,假设3、4和210。
我想打印此字节字符串看起来像
我正在使用
提前致谢,
编辑:感谢对此问题的各种反馈。我没有意识到Java字节默认是带符号的值,因此我怀疑String.valueOf()方法是问题所在。原来只是使用
解决签名格式问题。
再次感谢您的反馈!
在内部,这只是调用
并将
解释一下
用
由于OxFF是整数文字,因此
如果您和
等于
基本上,您只保留
(15个答案)
5年前关闭。
我有一个字节数组:
byte[] a = new byte[3];
我已经添加了一些字节。对于此示例,假设3、4和210。
我想打印此字节字符串看起来像
3 4 210
,但是我却得到3 4 -46
我正在使用
String.valueOf(a[i])
进行转换。有什么方法可以强制此转换提供无符号值?提前致谢,
编辑:感谢对此问题的各种反馈。我没有意识到Java字节默认是带符号的值,因此我怀疑String.valueOf()方法是问题所在。原来只是使用
String.valueOf(a[i]&0xFF)
解决签名格式问题。
再次感谢您的反馈!
最佳答案
Guava提供了可以进行转换的UnsignedBytes
类。 static
toString(byte)
方法
返回x的字符串表示形式,其中x被视为无符号。
例如
System.out.println(UnsignedBytes.toString(a[i]));
a[i] = -46
将在哪里打印210
在内部,这只是调用
public static int toInt(byte value) {
return value & UNSIGNED_MASK; // UNSIGNED_MASK = 0xFF
}
并将
int
转换为它返回的String
。解释一下
用
someByte & 0xFF
由于OxFF是整数文字,因此
someByte
值将扩展为int
。让我们以值-46
为例。其二进制表示为11111111111111111111111111010010
0xFF
的二进制表示为11111111 // ie 255
如果您和
&
这两个11111111111111111111111111010010
00000000000000000000000011111111
--------------------------------
00000000000000000000000011010010
等于
210
基本上,您只保留
int
的低8位。