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

时间:2012-03-05 21:21:46

标签: java bytearray byte unsigned

基本上,我想要的是将像"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]

编辑:我知道该字节最多只能容纳127个,所以我需要将它作为int数组而不是字节数组。

2 个答案:

答案 0 :(得分: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;
}

相当简单。

答案 1 :(得分:2)

Java没有无符号字节,因此要将它们转换为整数,就好像它们是无符号的一样,您需要使用int &按位(0xFF)AND它们:

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

输出:

1
226
64

你不一定需要存储为int数组 - 这取决于你想用它们做什么......