/ / Jak przekonwertować ciąg znaków reprezentujący liczbę całkowitą do niepodpisanej tablicy bajtów w języku Java? - java, bytearray, bajt, unsigned

Jak przekonwertować ciąg znaków reprezentujący liczbę całkowitą do niepodpisanej tablicy bajtów w języku Java? - java, bytearray, bajt, unsigned

Zasadniczo, chcę przekonwertować ciąg jak "123456" do niepodpisanej tablicy bajtów: [1, 226, 64]. Jednak patrzę wszędzie i to, co znalazłem, to uzyskać 2-skową tablicę bajtów [1, -30, 64]:

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

WYDAJNOŚĆ:

[1, -30, 64]

Jak to zrobić w Javie? Chcę, aby wyjście było:

[1, 226, 64]

EDYTOWAĆ: Wiem, że bajt może pomieścić tylko do 127, więc zamiast tablicy bajtowej potrzebuję go do tablicy int.

Odpowiedzi:

4 dla odpowiedzi № 1

Java nie ma typów bez znaku, więc będziesz musiał przechowywać wartości w tablicy 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;
}

Dość bezpośredni.


2 dla odpowiedzi nr 2

Java nie ma niepodpisanych bajtów, więc aby przekonwertować je na ints tak, jakby były niepodpisane, należy I bitowo (&) z int 0xFF:

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

Wydajność:

1
226
64

Nie musisz tego koniecznie sklep je jako tablicę int - to zależy od tego, co chcesz z nimi zrobić ...