宽字符与char*相互转换函数
2014-04-28 19:58
169 查看
问题源于将一个CString转成const char*,因为我的CString中存的是宽字符,所以各种转化均失效,最后在网上看到这两个函数,很好用
char *cctryWideCharToAnsi(wchar_t *pWideChar)
{
if (!pWideChar) return NULL;
char *pszBuf = NULL;
int needBytes = WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, NULL, 0, NULL, NULL);
if (needBytes > 0){
pszBuf = new char[needBytes+1];
ZeroMemory(pszBuf, (needBytes+1)*sizeof(char));
WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, pszBuf, needBytes, NULL, NULL);
}
return pszBuf;
}
wchar_t *cctryAnsiCharToWide(char *pChar)
{
if (!pChar) return NULL;
wchar_t *pszBuf = NULL;
int needWChar = MultiByteToWideChar(CP_ACP, 0, pChar, -1, NULL, 0);
if (needWChar > 0){
pszBuf = new wchar_t[needWChar+1];
ZeroMemory(pszBuf, (needWChar+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, pChar, -1, pszBuf, needWChar);
}
return pszBuf;
}
另附CString直接转化为char*的函数,也很实用
char* CStringToCharArray(CString str)
{
char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
ptr = new char [len+1];
memset(ptr,0,len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);
#else
ptr = new char [str.GetAllocLength()+1];
sprintf(ptr,_T("%s"),str);
#endif
return ptr;
}
char *cctryWideCharToAnsi(wchar_t *pWideChar)
{
if (!pWideChar) return NULL;
char *pszBuf = NULL;
int needBytes = WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, NULL, 0, NULL, NULL);
if (needBytes > 0){
pszBuf = new char[needBytes+1];
ZeroMemory(pszBuf, (needBytes+1)*sizeof(char));
WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, pszBuf, needBytes, NULL, NULL);
}
return pszBuf;
}
wchar_t *cctryAnsiCharToWide(char *pChar)
{
if (!pChar) return NULL;
wchar_t *pszBuf = NULL;
int needWChar = MultiByteToWideChar(CP_ACP, 0, pChar, -1, NULL, 0);
if (needWChar > 0){
pszBuf = new wchar_t[needWChar+1];
ZeroMemory(pszBuf, (needWChar+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, pChar, -1, pszBuf, needWChar);
}
return pszBuf;
}
另附CString直接转化为char*的函数,也很实用
char* CStringToCharArray(CString str)
{
char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
ptr = new char [len+1];
memset(ptr,0,len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);
#else
ptr = new char [str.GetAllocLength()+1];
sprintf(ptr,_T("%s"),str);
#endif
return ptr;
}
相关文章推荐
- Python Cookbook 第二版 汉化版 [Recipe 1.2] 字符与其对应的数字编码之间的转换
- Java 键盘输入字符创后倒序输出
- Tiny6410 简单的LED字符设备驱动
- 黑马程序员_java入门_IO流_3(字符流缓冲区)
- NSString去掉换行符和空白字符
- 字符串-01. 在字符串中查找指定字符
- HTML特殊字符编码对照表
- 字符串匹配的KMP算法
- java.sql.SQLException: ORA-00911: 无效字符
- 4-1 将字符串中数字字符替换成# (50分)
- lua中的魔法字符转义问题
- 使用str.setCharAt(位置,'字符'),修改指定索引处的字符
- 利用正则表达式, 验证控制文本框的输入字符类型
- Linux 无法从字符界面登陆 F1-F6
- js 字符串转为字符数组
- js 字符ascii码转换函数
- 第14周项目15-字符操作(二)
- XML文件错误之特殊字符
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)