Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen

Noahscript

Aktives Mitglied
Hallo zusammen,

ich habe ein byte Array, der eine Nachricht hat und auf eine Farbe der Nachricht hinweist:

Java:
new byte[]{3, 48, 51, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100};

Die Nachricht lautet Hello world.

Und um die Farbe der Nachricht mitzuteilen, bestehen die ersten drei bytes (3, 48, 51) aus dem Steuerzeichen (ich glaube es ist dieses Steuerungs-Key --> ^B) und dem Code 303 (in diesem Fall Farbe grün).

Ich möchte den Hex des Steuerzeichens (das wäre '\x02') und den Code bekommen (und mit dem entsprechenden HTML Farbe Tag ersetzen).

Wenn ich Folgendes versuche:
Java:
new String(new byte[]{3, 48, 51, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100});

Bekomme ich:
Code:
03Hello world

Ich möchte stattdessen das hier bekommen:

Code:
\x02303Hello world

Damit ich "\x02303" später durch zum Beispiel das hier ersetzen kann: <font color="green">

Wie kann ich dann den Hex eines Steuerungszeichen bekommen?
Und Warum bekomme ich 03 statt den Code 303?


LG und vielen Dank
 
Und um die Farbe der Nachricht mitzuteilen, bestehen die ersten drei bytes (3, 48, 51) aus dem Steuerzeichen (ich glaube es ist dieses Steuerungs-Key --> ^B) und dem Code 303 (in diesem Fall Farbe grün).
Erst mal sind das drei Bytes mit den Werten 3, 48 und 51. Wenn man hier z. B. einen ASCII-Zeichensatz unterstellt (oder z. B. auch UTF-8), dann kodiert die 3 das Steuerzeichen ETX (End of TeXt), die 48 das Zeichen '0' und die 51 eben das Zeichen '3'. Wenn Du daraus einen String erzeugst, resultiert das eben in "<ETX>03", weswegen Du "03" am Anfang ausgegeben bekommst.

Problem: der Aufbau der Nachricht passt nicht zum Rest Deiner Beschreibung.

Unabhängig davon kannst Du ein Byte oder ein Zeichen in Hex darstellen lassen: String.format("\\x%02x", (int)'A') würde z. B. zu \x41 führen.
 
Danke für deine Hilfe, @mihe7 !!!!!

Weißt wo das Problem lag?

Der Chat-Server empfängt das Steuerzeichen STX mit dem Code 303 und interpretiert das als grün. Aber er interpretiert auch das Steuerzeichen ETX mit dem Code 03 als grün. Ich dachte er interpretiert nur die erste Variante als grün. Und bis du mir geholfen hast wäre ich nie auf die Idee gekommen, das zu senden was ich empfange 🤦‍♂️.

Wenn jemand es gebrauchen kann, kann man damit den Hex eines Strings bekommen:
Java:
String s = new String(new byte[] {3, 48, 51});//oder auch so --> String s = "Hallo welt";
String s2 = "";
for(int f=0; f<s.length(); f++){
   s2 = s2 + String.format("\\x%02x",(int)s.charAt(f));
}

Ich weiß, vielleicht sollte man das mit StringBuffer machen. Aber ich habe es nur für ein Schnelltest gebraucht...


Vielen Dank nochmals und Grüße
 

Neue Themen


Zurück
Oben