Mam ciąg binarny i chcę podzielić go na fragmenty o długości 8, a następnie przechowywać odpowiednie bajty w tablicy bajtów. Na przykład ciąg „0000000011111111” powinien być konwertowany na {-128, 127}. Do tej pory napisałem następującą funkcję:
public static byte[] splitBinary(String binaryString) throws ConversionException {
if (binaryString.length()%8 != 0) {
throw new ConversionException();
}
byte[] result = new byte[binaryString.length()/8];
while (i < result.length) {
result[i] = (byte) (Integer.parseInt(binaryString.substring(i, i+8), 2)-128);
i+=8;
}
return result;
}
Ale to skutkuje {-128, 0}. Jak mogę osiągnąć pożądaną funkcjonalność?
3 odpowiedzi
Twoja rutyna rozdzielania jest zła.
Zwiększenie i o 1 po prostu przesuwa okno o jeden znak w prawo, a nie o dwa, co powoduje, że odczytane są ciągi znaków 00000000 i 00000001.
Zmieniłem funkcję w następujący sposób i teraz działa zgodnie z oczekiwaniami (po poprawieniu moich oczekiwań;)). Dziękuję wam wszystkim!
public static byte[] splitBinaryStringToByteArray(String binaryString) throws ConversionException {
if (binaryString.length()%8 != 0) {
throw new ConversionException();
}
byte[] result = new byte[binaryString.length()/8];
int i =0;int j=0;
while (i < binaryString.length()) {
System.out.println("Substring: " + binaryString.substring(i, i+8));
result[j] =((byte)Integer.parseInt((binaryString.substring(i, i+8)), 2));
j++;
i+=8;
}
return result;
}
Odnoszę się do rozmiaru wyniku, może być mniejszy niż rozmiar binaryString
, ale w binaryString.substring(i, i+8)
i i+=8
; używasz jako rozmiaru binaryString
. Więc zmień je na binaryString.substring(i*8, i*8+8)
i i++
.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].
result[8]
, który jest nieprawidłowy.