char字符与wchar_t字符的相互转换,以及wchar_t字符串的常用用法
来源:互联网 发布:checking php support 编辑:程序博客网 时间:2024/06/07 04:45
今天在做word报表的自动生成时,在读取数据文档的数据插入表格的时候,因为wordSelection.TypeText(LPCTSTR * text),需要传入的是LPCTSTR型的字符串(查看定义可知这是一个WCHAR型的数据),但infile文件流没有重载“>>”运算符,所以需要转换,开始我想到的是强制转换,但强制转换的结果就是在word文档里显示的是乱码(猜测可能是因为wchar_t占两字节,而char占一个字节,所以会有额外的未初始化的内存载入的情况,可以先分配一个wchar_t类型大小的内存,然后用memset()函数初始化内存,在把char型数据占用内存的数据复制过去)。当然,我也在网上查到了相应的转换函数:
1、char*转wchar_t* 和wchar_t*转char*的函数
<pre name="code" class="cpp">//将单字节char*转化为宽字节wchar_t*wchar_t* c2w(const char *str){ int length = strlen(str)+1; wchar_t *t = (wchar_t*)malloc(sizeof(wchar_t)*length); memset(t,0,length*sizeof(wchar_t)); MultiByteToWideChar(CP_ACP,0,str,strlen(str),t,length); return t;}
//将单字节char*转化为宽字节wchar_t*wchar_t* AnsiToUnicode( const char* szStr ){ int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 ); if (nLen == 0) { return NULL; } wchar_t* pResult = new wchar_t[nLen]; MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen ); return pResult;}
//将宽字节wchar_t*转化为单字节char*inline char* UnicodeToAnsi( const wchar_t* szStr ){ int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL ); if (nLen == 0) { return NULL; } char* pResult = new char[nLen]; WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL ); return pResult;}
2、char[] 转换为LPWSTR型
3、wchar_t* 的常用操作:
1、wcscat是连接宽字符串的,和strcat功能类似,用于把两个wchar_t型的数据连接起来
原型:_INTRIMP wchar_t *wcscat(
wchar_t *strDestination, //'\0'结尾的目标字符串
const wchar_t *strSource //'\0'结尾的源字符串
);
用法:#include <stdlib.h>
功能:把strSource所指字符串添加到strDestination结尾处,覆盖strDestination结尾处的'\0'并添加'\0'。
说明:strSource和strDestination所指内存区域不可以重叠且strDestination必须有足够的空间来容纳strSource的字符串。
返回值 : 返回指向strDestination的指针. No return value is reserved to indicate an error.
备注 : 因为wcscat在strDestination追加strSource前不进行检查,这是一个缓冲区溢出的潜在原因。故使用时应注意。推荐使用wcscat_s替代.
2、wcslen() 统计wchar_t型字符串的长度,需要00作为结束符来统计长度。类似strlen()函数的使用。
- char字符与wchar_t字符的相互转换,以及wchar_t字符串的常用用法
- 宽字符wchar_t* 和字符char*的介绍和转换
- wchar_t 与 char的转换
- char wchar_t 字符的转换有关问题,_T(),L
- char和wchar_t的相互转换
- wchar_t* 与 char* 相互转换(自己写的函数)
- char*(LPSTR)与wchar_t*(LPTSTR) 相互转换的函数
- c++中的char*与wchar_t*与string以及wstring之间的相互转换
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换
- 关于wchar_t 的输出及 wchar_t* 与 char*之间的相互转换
- 宽字符wchar_t *转char *的方法
- wchar_t与char类型的转换
- char 与 wchar_t的转换,欢迎更正
- wchar_t 与 char 的互相转换
- char与wchar_t之间的转换
- char*与wchar_t*之间的转换
- wchar_t*与char*之间的转换
- VC 中char 与 wchar_t的转换
- hdoj2571【DP基础】
- Unity让调试更加简单(一)
- [MySQL学习笔记]case when then else end用法
- 练习1-22 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个空格之后
- android studio构建项目一直卡在gradle build running界面
- char字符与wchar_t字符的相互转换,以及wchar_t字符串的常用用法
- 古典小说网 首创卡拉OK式阅读新体验
- SAP本地化-银企直连
- solver.prototxt参数说明(三)
- hdu_2955_Robberies(01背包)
- 用Workbench迁移MySQL小数据库
- 定制bootstrap的按钮btn-primary
- cassandra 监控方案评估
- php.ini配置文件详解