私はC#クライアントとC++サーバーを持っています。私はソケットを介してユーザーのFacebookの名前を送信しています。私は最初に名前の長さを書きます。例: 05/*sizeofname*/ getbytes("asdfg")
私はエラーが発生しません。しかし、私がこれをやろうとすると、İ
は2バイトを持っているので、 05/*size of name*/ getbytes("İasdf")
は、İasd
しか読み込みません。しかし、他の文字は1バイトです。私はそれをC++サーバで正しく読む方法を知らない。C#クライアントとC++サーバーのUnicodeデータソケット
サーバーC++:
byte firstlen = packet.byteread();
if (firstlen >= 150 || firstlen <= 0) { printf("first %d came\n", firstlen); goto hataver; }
char * firstname = new char[firstlen];
firstname = (char*)packet.charread(firstlen);
printf("income firstname = %s\n", firstname);
char * charread(int idlen)
{
char * retarray = new char[idlen];
memcpy(retarray, buffs + marker, idlen);
marker += idlen;
retarray[idlen] = 0;
return retarray;
}
クライアントのC#
yenisi.eklestrlen(firstname, (byte)sizeof(profile.FirstName)); //(byte)firstname.Length);
public void eklestrlen(string eklenecek,byte uzunluk)
{
ekle1(uzunluk);
ekles(eklenecek);
}
public void ekle1(byte eklenecek)
{
Paket2[marker] = eklenecek;
marker++;// eklenecek.Length;
}
public void ekles(string eklenecek2)
{
byte[] eklenecek = Encoding.UTF8.GetBytes(eklenecek2);
Array.Copy(eklenecek, 0, Paket2, marker, eklenecek.Length);
marker += eklenecek.Length;
}
[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve)を提供(投稿)できますか? –