Как преобразовать строку, представляющую целое число в байтовый массив без знака в Java? - PullRequest
3 голосов
/ 06 марта 2012

По сути, я хочу преобразовать строку типа "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 ]

4 голосов
/ 06 марта 2012

В 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 голосов
/ 06 марта 2012

Java не имеет неподписанных байтов, поэтому, чтобы преобразовать их в целые, как если бы они были беззнаковыми, вам нужно поразрядно AND (&) с 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 - это зависит от того, что вы хотите с ними делать ...

...