2012-03-05 40 views
3

基本上,我想要的是将"123456"这样的字符串转换为无符号字节数组:[1, 226, 64]。不过,我处处留心,我发现什么是获得2的补(签字)字节数组[1, -30, 64]如何将表示一个整数的字符串转换为Java中的无符号字节数组?

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

OUTPUT:

[1, -30, 64] 

那么,怎么能够在Java中做了什么?我想输出是:

[1, 226, 64] 

编辑:我知道字节只能容纳多达127个,所以不是字节数组,我需要它是int数组。

+0

Java中没有'unsigned byte'类型,因此您必须将其转换为'signed short/int'数组。 – Crozin 2012-03-05 21:24:22

回答

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; 
} 

相当简单。

+0

+1哦,是的!这很好。谢谢 :) – 2012-03-05 21:30:23

2

Java没有无符号字节,所以将它们转换为整数,好像他们是无符号,你需要和他们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数组 - 它取决于你想要对他们做什么...

相关问题