CString到char[]的转换
可以使用memcpy()函数:https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/reference/memcpy-wmemcpy?view=msvc-170
void *memcpy(
void *dest,
const void *src,
size_t count
);
wchar_t *wmemcpy(
wchar_t *dest,
const wchar_t *src,
size_t count
);
其中第一个变量是目的地,第二个变量是来源,第三个变量是长度。
CString在VS下默认是Unicode编码,一个字符占两个字节,所以在转换的过程中实际拷贝字符是CString长度的两倍,具体代码可以如下:
CString msg;
MSG_E.GetWindowText(msg);
wchar_t buf[100];
memcpy(buf,msg,msg.GetLength()*2);
CString str;
str.Format(_T("%wc"), buf[9]);
MessageBox(str);
这里的MSG_E是一个edit_control控件。这样就可以实现从CString到wchar的转化。
如果你确定你的输入是纯数组,那么还可以进一步转为char:
int iSize;
char* pszMultiByte;
//返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0'
iSize = WideCharToMultiByte(CP_ACP, 0, buf, -1, NULL, 0, NULL, NULL); //iSize =wcslen(pwsUnicode)+1=6
pszMultiByte = (char*)malloc(iSize * sizeof(char)); //不需要 pszMultiByte = (char*)malloc(iSize*sizeof(char)+1);
WideCharToMultiByte(CP_ACP, 0, buf, -1, pszMultiByte, iSize, NULL, NULL);
这样转换成char*后,每一个单元都是一个实际的数字。你可以将这个pszMultiByte当作一个char[]来用。