VC编程unicode字符集下char数组转化为CString

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)