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 № 1Java 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ć ...