Legen Sie die Byte-Werte in java
Ich soll das konvertieren des Binär-string in byte-array in java
. Ich habe den code schreiben, der jedes bit des byte-Arrays aus dem Binär-string String A = "1000000111010000"
private byte firstByte;
private byte secondByte;
byte xByte = new byte[2];
for(int i=0 ; i<A.length() ;i++){
if(i<8){
System.out.println(" i : "+i+" A.char[i] :"+A.charAt(i));
firstByte = (byte) (firstByte | (A.charAt(i) << i));
}else{
System.out.println(" i : "+i+" A.char[i] :"+A.charAt(i));
secondByte = (byte) (secondByte | (A.charAt(i) << i));
}
}
xByte[0] = firstByte;
xByte[1] = secondByte;
Schreiben Sie den obigen code habe ich genommen, die Hilfe von diese link .
Aber der Wert gespeichert int die xByte[0]
und xByte[1]
ist nicht korrekt.
Es gibt Werte wie
xByte[0] :-15
xByte[1] :0
Ist diesem schreiben ist Weg?Bitte schlage mir die Korrektur um die richtige byte-Werte.
System.out.println((int)A.charAt(i));
A. charAt[i] gibt einen char, nicht eine Zahl, und Sie setzen bit in einen char-Wert
Ich habe versucht, mit
(int)A.charAt(i)
aber es ergibt sich gleich.siehe meine Antwort..
InformationsquelleAutor rachana | 2013-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht einfach werfen die
A.charAt(i)
zu einemint
. Es werde die ASCII-code der 1 und 0.Daher müssen Sie etwas tun, wie diese, um Ihr numerischer Wert:-
InformationsquelleAutor SudoRahul
Verwenden Sie einfach BinaryCodec von Apache Commons:
Wenn Sie wollen, um eine solche Umstellung auf eigene Faust, Ihr code muss einige Korrekturen vornehmen.
Sie erwarten, dass
A.charAt(i)
zurück numerischen 0 oder 1 sind, aber tatsächlich zurückchar
'0' oder '1'. Der Datentyp char ist ein einzelnes 16-bit-Unicode-Zeichen mit einem numerischen Bereich von 0 bis 2^16, die Werte sind formal genannt code Punkte.Drucken Sie das code-point-Wert, den Sie brauchen, um zu cast char zu int:
Ausgang für '0' und '1':
Operator '<<' konvertiert char-Operanden zu int, daher diese Verschiebung produziert falsche Ergebnisse, weil:
ist das gleiche wie
was für char '0' ist das gleiche wie das verschieben von Wert 48 Links:
Konvertieren char '0' oder '1' 0 oder 1 numerischen Wert ein Zeichen.getNumericValue(A. charAt(i)):
Auch die Verlagerung von Wert
i
ist falsch. Sie müssen verschoben werden, indem(7-i)
für das erste byte oder(7-i%8)
für das zweite byte. Wenn der indexi
8 erreicht, die es braucht, um anfangen zu zählen von 0, daheri%8
Werden beim drucken die Werte für byte-Typ Sie haben zwei Optionen: byte numerischer Wert oder Binär-string-Darstellung:
Ausgabe:
Ganze korrigiert Beispiel:
1
ist eigentlich die Nummer 1. Es ist eine Methode, "Zeichen".getNumericValue() für den Zugriff.Danke, habe ich korrigiert die post.
InformationsquelleAutor Sergej Panic
A. charAt[i] gibt einen char, nicht eine Zahl, und Sie setzen bit in einen char-Wert.
Stattdessen
InformationsquelleAutor code_fish