Hex-String zu byte transformieren

Julian R.

Mitglied
Hallo Zusammen! 🙂

Ich arbeite derzeit an einem Programm, bei welchem ich einen String mit mehreren, verschiedenen Hex-Werten in einem String ( bspw. "FF 23 B7 C3 10 69 AA") bekomme und diese in einem byte-Array abspeichern will.

Mein Problem hierbei ist, dass manche dieser Werte falsch gewandelt werden. Beispielsweise wird "FF" zu "-1" und "B7" zu "-73".
Hierbei habe ich ein gewisses Schema entdeckt:

„FF“ => 1111 1111 => invertieren: 0000 0000 => +1: 0000 0001 => *(-1): Ergebnis = (-1)
„B7“ => 1011 0111 => invertieren: 0100 1000 => +1: 0100 1001 => *(-1): Ergebnis = (-73)


Hier der relevante Codeausschnitt:
Java:
String string = "FF";
int len = string.length(); 	
byte[] byteArray = new byte[len / 2]; 

for (int x = 0; x < len; x += 2) { 
     byteArray [x / 2] = (byte) ((Character.digit(string.charAt(x), 16) << 4) 
		     + Character.digit(string.charAt(x+1), 16)); 
}

Alternative Umformalgorithmen (bringen das selbe Ergebnis!):
Java:
for (int x=0;x<string.length()/2;x++) { 
     byteArray[x] = (Integer.decode( "0x"+string.substring(x*2, (x+1)*2))).byteValue(); 
} 
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////			    
				    
String hexVal = "0123456789ABCDEF"; 
for( int x = 0; x < len; x += 2 ) { 
     //make a bit representation in an int of the hex value  
     int hn = hexVal.indexOf( string.charAt( x ) ); 
     int ln = hexVal.indexOf( string.charAt( x + 1 ) ); 
     //now just shift the high order nibble and add them together 
     byteArray[x/2] = (byte)( ( hn << 4 ) | ln ); 
}



Ich hoffe ihr könnt mir weiterhelfen! 😎
Danke dafür schonmal an dieser Stelle!


Mit freundlichen Grüßen,

Julian R.
 
Mein Problem hierbei ist, dass manche dieser Werte falsch gewandelt werden. Beispielsweise wird "FF" zu "-1" und "B7" zu "-73".
Hierbei habe ich ein gewisses Schema entdeckt:

„FF“ => 1111 1111 => invertieren: 0000 0000 => +1: 0000 0001 => *(-1): Ergebnis = (-1)
„B7“ => 1011 0111 => invertieren: 0100 1000 => +1: 0100 1001 => *(-1): Ergebnis = (-73)

Das ist nicht falsch sondern genau das was ein Byte halt ist.

sie zum Beispiel hier

hier ist es vielleicht etwas übersichtlicher

Hier steht:
Datenelemente im Detail

public static final byte MIN_VALUE = -128
Der niedrigste Wert, den der Typ byte speichern kann.

public static final byte MAX_VALUE = 127
Der höchste Wert, den der Typ byte speichern kann.


und was du oben so schön erklärst nennt man 2er Komplement und ist die Art wie negative Zahlen (nicht nur in Java) abgebildet werden.
 
hm okay, das erklärt natürlich einiges 🙂

Dann muss ich mal sehn ob ich das ganze nicht über ein anderes Format bewerkstelligen kann :-S


Danke dir für die schnelle Antwort! ;-)
 
hehe ähm ^^
Sorry für meine fehlenden Erklärungen ;-)


Ich will im Grunde auf einen Com-Port mit einem Output-Stream Hex-Nachrichten senden.
Und dafür muss ich die Werte aus einem String in ein byte-Array schreiben.

Ich denke mal, dass - da du das oben so geschrieben hast - egal ist ob im Array nun "-1" oder "255" steht ?!
 
Hm also im Array drin steht auf jeden Fall FF - wenn das nur ein Darstellungsproblem ist (FF wird halt als -128 dargestellt) ist gar kein Problem vorhanden.

Eigentlich zielte meine Frage darauf hin ob es ein Problem zu lösen gibt ;-)
 

Zurück
Oben