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?
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.
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.
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.
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.
Hallo,
danke, habe jetzt das Nullzeichen gesucht und ich bekomme den Namen jetzt richtig heraus. Danke für die Hilfe!