struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
CString strState;
//记得要用char接收数据,因为网络中传输的数据只是和编码方式
无关的字节流
//所以接收到字节流后再转化为宽字符unicode编码方式用于显示和
写文件
char tempSocketReceive[MAXDATALENGTH] = "";
memset(tempSocketReceive, 0, MAXDATALENGTH);//char清空;
tempSocketReceive[MAXDATALENGTH - 1] = ‘\0‘;//防止数据末尾
出现烫烫烫烫,加上之后仍然出现
int length = recvfrom(listen_socket, tempSocketReceive,
MAXDATALENGTH, 0, (struct sockaddr *)&addr, &addr_len);
//判断为将多字节编码转化为宽字节编码所需要的内存空间
DWORD dwNum = MultiByteToWideChar(CP_ACP, 0,
tempSocketReceive, -1, NULL, 0);
//在堆上分配内存,申请的内存必要要释放,不然早晚会内存泄露
导致程序崩溃
wchar_t *pwText;
pwText = new wchar_t[dwNum];
//将对字节转换位宽字皆unicode,转换结果保存在堆内存上,记得
delete
MultiByteToWideChar(CP_ACP, 0, tempSocketReceive, -1,
pwText, dwNum);
//将收到的数据用CString表示,便于在MFC上显示和用CFile写入文
件
CString rawData(pwText);//未经解析的原始串口数据数据
CString temp = comDecode(rawData);//经过解析的串口数据
//堆内存已经由CString的构造函数转化栈内存,所以堆内存尽早释
放
delete[]pwText;VC编程unicode字符集下char数组转化为CString
原文:http://blog.csdn.net/wangshihui512/article/details/42886229