【发布时间】:2018-04-26 16:14:54
【问题描述】:
我有一个 C# 客户端和一个 C++ 服务器。我通过套接字发送用户的 Facebook 名称。我在开头写了名字的长度。例如:
05/*sizeofname*/ getbytes("asdfg")
我没有收到错误。但如果我尝试这样做:
05/*size of name*/ getbytes("İasdf"),它只读取İasd
因为İ 有两个字节。但其他字母有 1 个字节。我不知道如何在 C++ 服务器中正确读取它。
服务器 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;
}
【问题讨论】:
-
能否请您提供(发布)Minimal, Complete, and Verifiable example?
标签: c# c++ string sockets unicode