如何在Java中将表示整数的字符串转换为无符号字节数组?

3

我的目标是将类似于"123456"的字符串转换为无符号字节数组:[1, 226, 64]。然而,我搜索了很多地方,发现的结果只有获取2的补码(有符号)字节数组:[1, -30, 64]

byte[] array = new BigInteger("123456").toByteArray();
System.out.println(Arrays.toString(array));

输出:

[1, -30, 64]

那么,在Java中该如何实现呢?我希望输出结果为:
[1, 226, 64]

编辑:我知道byte只能容纳到127,所以我需要它变成int数组。


Java中没有“unsigned byte”类型,因此您需要将其转换为“signed short/int”数组。 - Crozin
2个回答

4

Java没有无符号类型,因此您需要将值存储在int数组中。

byte[] array = new BigInteger("123456").toByteArray(); 
int[] unsigned_array = new int[array.length]; 
for (int i = 0; i < array.length; i++) { 
    unsigned_array[i] = array[i] >= 0 ? array[i] : array[i] + 256;
}

相当简单。

2

Java中没有无符号的字节,所以如果要将它们转换为无符号的int类型,需要使用按位与(&)和int类型的0xFF进行操作:

byte[] array = new BigInteger("123456").toByteArray();
for (int i = 0; i < array.length; i++) { 
    System.out.println(0xFF & array[i]);
}

输出:

1
226
64

您不一定需要将它们存储为int数组——这取决于您想要做什么...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接