Laden...

[erledigt] ByteArray mit UTF-8-Codes in String umwandeln, aber nur bis zum ersten Nullzeichen

Erstellt von hakbak vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.704 Views
Thema geschlossen
H
hakbak Themenstarter:in
108 Beiträge seit 2007
vor 10 Jahren
[erledigt] ByteArray mit UTF-8-Codes in String umwandeln, aber nur bis zum ersten Nullzeichen

Hallo,
ich stehe gerade etwas auf dem Schlauch. Ich empfange per TCP ein festes ByteArray mit einer Größe von 16 Byte. Darin befindet sich ein dann ein Name. Diesen wandel ich dann in einen String um:


string name = System.Text.Encoding.UTF8.GetString(bytearray)

Nun ist es aber so, dass das komplette Bytearray umgewandelt wird und da der Name nicht immer die vollen 16 Zeichen ausfüllt, werden an den decodierten Namen dann leere Zeichen (bin mir nicht sicher, ob es Leerzeichen sind angehängt.
Ich empfange das Bytearray als Teil eines structs und mir werden eben immer die 16 Byte geschickt.
Ich steht gerade echt auf dem Schlauch, kann ich irgendwie nur den Name aus dem Array decodieren, ohne die leeren Zeichen hinten dran?

D
615 Beiträge seit 2009
vor 10 Jahren

Hallo hakbak

Du könntest Trim verwenden, oder versteh ich die Frage nicht ?

Beste Grüsse

Diräkt

H
hakbak Themenstarter:in
108 Beiträge seit 2007
vor 10 Jahren

Hallo,
du verstehst die Frage schon richtig, nur funktioniert Trim() nicht. Es handelt sich scheinbar eben nicht um Leerzeichen, die da aus dem "leeren" Bytes decodiert werden, sondern um irgendwie Sonderzeichen, die aus diesen Bytes decodiert werden.

D
216 Beiträge seit 2009
vor 10 Jahren

Dann guck dir an, was in diesen bytes drinsteht, und mach dann .Trim((char)0x00) oder was auch immer in den überflüssigen bytes steht. Oder du bekommst auch die Länge des Strings übertragen, dann kannst du mit .Substring() arbeiten.

C
2.122 Beiträge seit 2010
vor 10 Jahren

Ich würde zuerst die überflüssigen Bytes abschneiden und dann erst einen String draus machen.
Sonst wird ein unsinniger String erstellt, der vielleicht auch mal falsch interpretiert wird und zu einem Fehler führt.

4.942 Beiträge seit 2008
vor 10 Jahren

Hallo,

ich nehme mal an, daß es sich um einen nullterminierten C-String arbeitet. Dann kannst du dir aber nicht sicher sein, daß alle Zeichen dahinter auch NULL sind.
Daher wirst du selber das Nullzeichen suchen müssen: IndexOf('\0'). Und dann kannst du die GetString(Byte[], Int32, Int32)-Überladung damit benutzen.

H
hakbak Themenstarter:in
108 Beiträge seit 2007
vor 10 Jahren

Hallo,

danke, habe jetzt das Nullzeichen gesucht und ich bekomme den Namen jetzt richtig heraus. Danke für die Hilfe!

Thema geschlossen