Encoding und Gewinnung von Zeichen aus der Hexa-Darstellung

  • Themenstarter Themenstarter jonathan_07
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

jonathan_07

Gast
hi

ih habe diverse zeichenketten, die in der hexa-darstellung vorhanden sind. so steht beispielsweise die folgende zeichenkette für eine folge von ziffern:

Code:
35373630323538

manche zeichenketten sind in ANSII codiert, manche wieder in Unicode usw. Nun, wie krige ich die zeichenkette in "Cp1252" aus dieser hexa-form?

was habe ich gemacht:
- habe jeweils zwei zeichen zusammengatan und daraus einen byte-wert errechtet. so habe ich ein array von bytes erstellt.

Code:
 byte[] buffer = [53, 55, 54, 48, 50, 53, 56]

- nachträglich habe ich einen String erzeugt:

Code:
String str = new String(buffer, "Cp1252");

nun, ich bin nicht ganz sicher, ob dies so gut ist. kann man dies auch einfacher machen?

danke
 
hat niemand eine idee?

übrigens, die sache macht mir immer mehr probleme. folgende zeichenfolge in hexa-darstellung soll in eine zeichenkette umgewandelt werden:

Code:
0001811C61B08420EE121DA0A8848D907010AE0500E04643B0998E208088124284CCF0F380CB8A68002E2010808400090347106941048D1B104109C607D20A0100000000000000000000000003EA

die zeichenkette ist angeblich in ASCII kodiert.

wie zuvor beschreiben, probiere ich jeweils zwei zeichen in ein byte umzuwandeln, um danach mit dem konstruktor

Code:
String(byte[] bytes, String charsetName)

arbeiten zu können. das problem ist aber, dass der byte-bereich halt für werte wie 81 (dezimal = 129) nicht ausreicht. so kann ich kein byte-array dem konstruktor übergeben.

wie könnte man dies machen?
 
was soll denn für 0x81 für ein Zeichen rauskommen?
falls du das schon weißt,
dann erstelle dir einen normalen String mit diesem Zeichen drin und wandle diesen String in ein byte[] des fraglichen Encodings um,
sofern du weißt, wie das geht (ich grad nicht)
-> dann wüßtest du, wie du aus dem deinem HexString ein byte[] erstellen musst (bzw. zumindest wie dieses byte[] aussehen sollte 😉 ),
damit new String(byte[] bytes, String charsetName) daraufhin funktioniert
 
danke erstmal.

leider habe ich nur die information, dass es sich um ASCII-Codierung hanelt: ob es sich um ASCII 0-127 oder um ASCII 128-255 handelt, steht nirgendwo.

jetzt noch eine frage, die mit folgendem code veranschaulicht werden soll:


Code:
String tmp = "81";
byte b = Byte.parseByte(tmp, 16);

dieser code liefert die folgende fehlermeldung:

java.lang.NumberFormatException: Value out of range. Value:"81" Radix:16

wenn ich jetzt den wert 81 als byte parsen würde, würde ich -127 erwarten, was durchaus ein byte-wert ist. wieso kommt diese meldung hier? ich vermute, dass ich hier einen grossen fehler mache.
 
Nö... so gross ist der Fehler gar nicht.
Code:
String tmp = "81";
byte b = Integer.parseInt(tmp, 16).byteValue();
So kann der Byte-Bereich wenigstens nicht überschritten werden. Überläufe sollten in den Negativ-Bereich des Bytes gehen. Und bevor jemand meckert... Ja... das ganze geht auch mit "Short.parseShort().byteValue()".
Achso... schätze ich hab' mich bei Extended ASCII irgendwie verdrückt ausgekehrt. Der normale ASCII-Bereich wird natürlich um die Zeichen 128-255 erweitert.

mfg Spacerat
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben