将有符号字节数组转换为无符号字节

时间:2017-10-26 08:50:42

标签: java unsigned

我有一个字节数组。

bytes[] = [43, 0, 0, -13, 114, -75, -2, 2, 20, 0, 0]

我想在Java中将其转换为无符号字节。 这就是我所做的:创建一个新数组并使用&复制值。为0xFF:

    this.bytes = new byte[bytes.length];
    for (int i=0;i<bytes.length;i++)
        this.bytes[i] = (byte) (bytes[i] & 0xFF);

但是新数组中的值也保持为负值。 我做错了什么?

2 个答案:

答案 0 :(得分:3)

Java中的

bytes始终是签名的。

如果要获取这些字节的无符号值,可以将它们存储在int数组中:

byte[] signed = {43, 0, 0, -13, 114, -75, -2, 2, 20, 0, 0};
int[] unsigned = new int[signed.length];
for (int i = 0; i < signed.length; i++) {
    unsigned[i] = signed[i] & 0xFF;
}

您将获得以下值:

[43, 0, 0, 243, 114, 181, 254, 2, 20, 0, 0]

答案 1 :(得分:1)

Java没有任何称为无符号字节的东西。您必须使用其他类型,例如shortint才能保存值&gt; 127。