# byte - hex - byte.. casten



## JanHH (20. Jul 2011)

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


----------



## JanHH (20. Jul 2011)

Hm danke, habs schon


----------



## Gast2 (20. Jul 2011)

JanHH hat gesagt.:


> Hm danke, habs schon



Würdest du den Thread dann bitte als erledigt markieren und den Rest auch an deiner Lösung teilhaben lassen?


----------



## JanHH (20. Jul 2011)

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 ;-).


----------



## Ariol (20. Jul 2011)

```
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:

```
10
0A
10
```

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

Negative Werte gehen auch.

```
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:

```
-1
FF
-1
```


----------



## JanHH (21. Jul 2011)

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.


----------



## Gast2 (21. Jul 2011)

Und bitte verwende Java Tags. Müsstest du mit über 500 Posts eigentlich wissen.

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


----------



## JanHH (22. Jul 2011)

Für richtigen Code verwende ich natürlich java-Tags. Ich hab das eher als Pseudocode bzw. Fliesstext gesehen.


----------



## Gast2 (22. Jul 2011)

JanHH hat gesagt.:


> Für richtigen Code verwende ich natürlich java-Tags. Ich hab das eher als Pseudocode bzw. Fliesstext gesehen.



Man weiss ja nie


----------

