byte - hex - byte.. casten

JanHH

Top Contributor
Hallo,

ich stehe vor der Aufgabe, eine Datei hexadezimal zu codieren. Also konkret so: Eine Datei besteht aus bytes (8 bit). Jedes Byte soll in eine zweistellige Hex-zahl (von 00 bis FF) umgewandelt werden, die alle aneinandergereiht einen String ergeben, der doppelt so lang ist wie die Datei an sich. Später soll dann der String wieder decodiert werden, d.h. je zwei Zeichen -> eine Hex-Zahl -> casten nach byte. An sich trivial, wäre da nicht die Sache mit dem Vorzeichenbit bei den Bytes.. also einfach byte b=Byte.parseByte(myString, 16) klappt zumindest nicht so ohne weiteres.

Wie genau geht das?

Danke
Jan
 
Gerne doch.

zum byte (geht von -128 bis +127) 128 addieren (geht dann von 0 bis 255)

int k=aByte+128;

Hex-String erzeugen

String s=Integer.toHexString(k);

ggf. vornullen
if(s.length()==1) s="0"+s;

fertig

Zum decodieren

int k=Integer.parseInt(s, 16);
k=k-128;
aByte=(byte)

also ziemlich banal ;-).
 
Java:
		byte b = (byte)0x0A;
		System.out.println(b); //Check
		
		//HexString:
		String s = String.format("%02X", b);
		System.out.println(s); //Check
		
		//Back to byte
		byte b2 = (byte) Integer.parseInt(s,16);
		System.out.println(b2); //Check

Ausgabe:
Code:
10
0A
10

Find ich persönlich einfacher...zumal keine 0 an den Anfang gepaddet werden muss.

Negative Werte gehen auch.
Java:
		byte b = (byte)0xFF;
		System.out.println(b); //Check
		
		//HexString:
		String s = String.format("%02X", b);
		System.out.println(s); //Check
		
		//Back to byte
		byte b2 = (byte) Integer.parseInt(s,16);
		System.out.println(b2); //Check

Ausgabe:
Code:
-1
FF
-1
 
Zuletzt bearbeitet:
Jo stimmt, zumal durch das s="0"+s ja auch jeweils ein komplett neues String-Objekt erzeugt wird, also ziemlicher overhead. Vielen Dank, werd das mal ausprobieren.
 
Und bitte verwende Java Tags. Müsstest du mit über 500 Posts eigentlich wissen.

Und das Thema ist immernoch nicht als erledigt markiert :noe:
 

Zurück
Oben