Laden...

Byte Array in einen lesbaren String umwandeln?

Erstellt von thet vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.626 Views
thet Themenstarter:in
27 Beiträge seit 2005
vor 19 Jahren
Byte Array in einen lesbaren String umwandeln?

Moin moin!

Kennt jemand eine Klasse/Methode aus dem Framework, mit der ich ein Byte-Array in einen lesbaren String umwandeln kann?

Ich habe ein Array mit Bytes (Werte 0..255) und möchte daraus einen String generieren, der nur aus ASCII-Zeichen besteht. Ein Hex-Dump würde meiner Anforderung bereits genügen. Gibt es für solche Konvertierungen irgendeine hilfreiche Klasse im Framework?

Mit besten Grüßen
Thomas

P
939 Beiträge seit 2003
vor 19 Jahren

Jepp,
gibt es.

string s = System.Text.Encoding.ASCII.GetString(byteArray);

Aber ASCII geht nur von 0 bis 127. Kann passieren, dass du ein anderes Encoding verwenden musst, z.B. cp1252 oder cp850 .. oder UTF8.

Gruss
Pulpapex

thet Themenstarter:in
27 Beiträge seit 2005
vor 19 Jahren

Moin moin!

Danke für Deinen Hinweise - aber leider produziert System.Text.Encoding.ASCII.GetString auch nicht-lesbare Zeichen. Ich bekomme ein Problem, wenn ich den so erzeugten String in einer Textdatei abspeichern will. Ich benötige eine Codier/Dekodierfunktion, die das Bytearray ausschließlich in lesbare Zeichen (Zahlen, Buchstaben etc.) abbildet.

Mit besten Grüßen
Thomas

S
127 Beiträge seit 2004
vor 19 Jahren

Wenn man ein Byte in ein Ascii-Zeichen umwandeln, kann es passieren das das Byte ein Zeichen erzeugt was man nicht sieht. Ascii-Zeichen die sichtbar sind fangen erst bei 32 (int) an davor sind es einfach Steuerzeichen Tab, neue Zeile, Dateiende, u.s.w. (siehe Ascii-Zeichen-Tabelle).#

Aber ich würde dir vorschlagen die Bytewerte in einen int zucasten und diese dann in eine Datei schreiben, dabei musst du dir aber ein Trennungszeichen überlegen (Komma, Semikoln, neue Zeile) damit du unterscheiden kannst wo ein Byte aufhört und wo es anfängt. Das Trennungszeichen kann alles sein, ist deiner Phantasie überlassen, ausser Zahlen natürlich.

P
939 Beiträge seit 2003
vor 19 Jahren

Das geht mit:

string s = Convert.ToBase64String(byteArray);

Ich habe geguckt ob es dafür auch ein Encoding gibt. Müsste es ja eigentlich, habe aber nichts gefunden. Weiss da jemand mehr?

thet Themenstarter:in
27 Beiträge seit 2005
vor 19 Jahren

Moin moin!

Pulpapex - vielen Dank! Mit Convert funktioniert es bestens in beide Richtungen...

string s = Convert.ToBase64String(byteArray); 
byte[] a = Convert.FromBase64String(s);

Ich war inzwischen schon bei System.Xml.XmlConvert.EncodeName/DecodeName angelangt - geht zwar auch, aber ToBase64String/FromBase64String ist natürlich wesentlich eleganter und erzeugt deutlich kürzere String.

Mit besten Grüßen
Thomas

4.506 Beiträge seit 2004
vor 19 Jahren

Ich bin mir nicht sicher, aber sind Base64Strings nicht UNICODE Charaktere?

Falls ich mich irre, dann sorry, ich dacht halt nur...

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo norman_timo,

nein, base64 verwendet geben gerade nur 64 verschiedene druckbare Zeichen des Ascii-Zeichensatzes unter 128. Das Ergebnis von base64 ist also Ascii-Code reinsten Wassers. Base64-kodierte Daten kann man z.B. dann gefahrlos über Kanäle verschicken, die nur 7bit ASCII beherrschen.

herbivore

PS: Ich vergesse immer wieder, wie gut Wikkipedia für sollche Fälle ist. Wer es also genau wissen will: http://de.wikipedia.org/wiki/Base64