TCP-Sockets: Empfangene Zeichenkette wird dezimal ausgegeben?!
-
Hallo!
Plattform: Win32
Compiler: Visual StudioFolgendes Szenario: Client (in C++ programmiert) schickt über WinAPI-Sockets eine Zeichenkette (bspw. "0") über's Netzwerk.
Der Server (programmiert in C#) empfängt diese nun als byte-Stream, wandelt die Bytes in den string-Datentyp um und gibt mir das Ergebnis aus. Große Verwunderung: ich bekomme jeweils nur die Dezimal-Werte des ASCII-Codes angezeigt!
Server:
this.tcpserver = new TCPServerClass(); ... byte[] re = new byte[1]; re = this.tcpserver.Read(1); // Ausgabe: "48" MessageBox.Show(Convert.ToString(re[0].ToString()));
Client:
// Als Parameter die zu sendende Zeichenkette + Länge client->SendToServer("0", 1)
Die Funktion
SendToServer
bildet dabei einen simplen Wrapper um die nativesendto
-Funktion, sollte also nicht näher erwähnt werden.Jemand eine Lösung? Danke im Voraus!
-
Bytes sind ja auch Zahlen, keine Zeichen
using System.Text; byte[] StringToByteArray(string str) { System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); return enc.GetBytes(str); } string ByteArrayToString(byte[] arr) { System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); return enc.GetString(arr); }
In System.Text liegen auch Unicode-Encodings.
-
Ausgezeichnet, vielen herzlichen Dank! Ich dachte bisher, der
byte
-Datentyp würde einfach nur ein rohes Byte repräsentieren, welches erst in den gewünschten Datentyp konvertiert werden muss...Danke Dir nochmal!
-
Und man kann das sogar machen ohne unnötigerweise den GC zu füttern
using System.Text; byte[] StringToByteArray(string str) { // System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); return System.Text.Encoding.ASCII.GetBytes(str); } string ByteArrayToString(byte[] arr) { // System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); return System.Text.Encoding.ASCII.GetString(arr); }
-
-
weqweqeqwe schrieb:
Bytes sind ja auch Zahlen, keine Zeichen
Das ist falsch. Bytes sind weder Zahlen noch Zeichen, sondern eine Zusammenstellung aus mehreren Bit, gewöhnlich 8 Bit.
Welche Repräsentation diese Bits haben, hängt von der Codierung ab.
mikey schrieb:
Ausgezeichnet, vielen herzlichen Dank! Ich dachte bisher, der
byte
-Datentyp würde einfach nur ein rohes Byte repräsentieren, welches erst in den gewünschten Datentyp konvertiert werden muss...Das ist auch richtig. Allerdings muss vorher erstmal geklärt werden, welche Codierung diese Bytes haben. 1001101101001000 kann nämlich alles mögliche bedeuten von ASCII bis hin zu Unicode oder sonstwas.
-
TomBombadil1 schrieb:
weqweqeqwe schrieb:
Bytes sind ja auch Zahlen, keine Zeichen
Das ist falsch. Bytes sind weder Zahlen noch Zeichen, sondern eine Zusammenstellung aus mehreren Bit, gewöhnlich 8 Bit.
Welche Repräsentation diese Bits haben, hängt von der Codierung ab.
mikey schrieb:
Ausgezeichnet, vielen herzlichen Dank! Ich dachte bisher, der
byte
-Datentyp würde einfach nur ein rohes Byte repräsentieren, welches erst in den gewünschten Datentyp konvertiert werden muss...Das ist auch richtig. Allerdings muss vorher erstmal geklärt werden, welche Codierung diese Bytes haben. 1001101101001000 kann nämlich alles mögliche bedeuten von ASCII bis hin zu Unicode oder sonstwas.
Oh Gott bist du klug...