我有以下代碼,從舊的VB6程序轉換爲C#。 VB6使用了舊的Winsock,它可以接受一個String參數,但是C#程序使用System.Net.Socket which
想要一個byte
數組。Encoding.UTF8.GetBytes似乎插入一個虛假的字節
byte[] msg = Encoding.UTF8.GetBytes(tempString);
_TCPConn.Send(msg);
tempString
有
0x0002 (' ')
0x0000 ('\0')
0x0000 ('\0')
0x0000 ('\0')
0x0080 (' ')
0x006d ('m')
0x0068 ('h')
但msg
得到一個額外的字節
0x02
0x00
0x00
0x00
**0xc2**
0x80
0x6d
0x68
凡說, 「C2」 是從哪裏來的?
接收器期待什麼? ANSI字符串或Unicode字符串? –
VB6允許在字符串中存儲字節,但那些日子已經結束。特別是Unicode規範化可以在您甚至將其轉換回字節之前隨機銷燬內容。你需要在覈心解決這個問題並停止使用字符串。 –