wince编程心得(一)------wince字符转换函数及应用
2008-11-28 15:31
246 查看
大家都知道wince下字符集是unicode字符集,因此在wince开发时经常会遇到unicode与ansi转换的问题,而常用的转换函数就为WideCharToMultiByte(宽字符集转多字符集),MultiByteToWideChar(多字符集转宽字符集),然而初学者在应用这两个函数时常常会犯一些概念性的错误。下面我就对这两个函数的使用做一下简单说明,希望初学者不要在这个上面犯错误,如果是函数出错,会造成缓冲区溢出,错误不好发现。
(1)宽转多函数
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
UINT CodePage;//////字符集代码页
DWORD dwFlags;//////该标志一般设置为0,具体请看EVC帮助
LPCWSTR lpWideCharStr;///////宽字符串
int cchWideChar;//////宽字符串的长度,以字符为单位,如果此值设为-1,则函数自动获得宽字符串的长度,编程中此值一般设置为-1
LPSTR lpMultiByteStr;多字节字符串缓冲区指针,
int cbMultiByte;//////转换后多字节的缓存最大值(用字节来计算),如果传递0,则本函数返回目标缓存的大小值
LPCSTR lpDefaultChar;/////当宽字节字符串的有字符在代码页中无法转换时,返回这个变量所指的值,一般设为NULL;
LPBOOL lpUsedDefaultChar;这个值可以用来监测转化是否成功,通常设为NULL;
(2)多转宽函数
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
UINT CodePage;////字符集代码页
DWORD dwFlags;////该标志一般设置为0,具体请看EVC帮助
LPCSTR lpMultiByteStr;/////多字节字符串
int cbMultiByte;/////多字节字符串长度,以字节为单位,如果此值设为-1,则函数自动获得多字节字符串长度.编程中一般设置为-1
LPWSTR lpWideCharStr;/////宽字符串缓冲区指针
int cchWideChar;//////宽字符串缓冲区最大值(以字符为单位),如果传0,则函数返回转化后缓冲区大小,为字符个数
(3)MultiByteToWideChar转化实例
void MultiByte_To_WideChar_Convert()
{
//////(1)声明转换前的字符串
char chSource_Char[] = "hello world";
//////(2)调用MultiByteToWideChar,为lpWideCharStr传递NULL , cchWideChar 传递0
int iWide_Buffer_Size = MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , NULL , 0);
//////(3)声明宽字符缓冲区
WCHAR * pwchWide_Char = new WCHAR[iWide_Buffer_Size + 1];
if(pwchWide_Char == NULL)
{
AfxMessageBox(L"内存分配失败");
return;
}
memset(pwchWide_Char , 0 , (iWide_Buffer_Size + 1)*sizeof(WCHAR));
//////(4)转化
MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , pwchWide_Char , iWide_Buffer_Size);
}
WideCharToMultiByte()用法和上例类似。希望能够对初学者有所帮助,以免犯我犯过的错误。我做ce时间不长,如果有什么地方写的不对,希望大家能批评指正。
(1)宽转多函数
int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,
LPBOOL lpUsedDefaultChar
);
UINT CodePage;//////字符集代码页
DWORD dwFlags;//////该标志一般设置为0,具体请看EVC帮助
LPCWSTR lpWideCharStr;///////宽字符串
int cchWideChar;//////宽字符串的长度,以字符为单位,如果此值设为-1,则函数自动获得宽字符串的长度,编程中此值一般设置为-1
LPSTR lpMultiByteStr;多字节字符串缓冲区指针,
int cbMultiByte;//////转换后多字节的缓存最大值(用字节来计算),如果传递0,则本函数返回目标缓存的大小值
LPCSTR lpDefaultChar;/////当宽字节字符串的有字符在代码页中无法转换时,返回这个变量所指的值,一般设为NULL;
LPBOOL lpUsedDefaultChar;这个值可以用来监测转化是否成功,通常设为NULL;
(2)多转宽函数
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
UINT CodePage;////字符集代码页
DWORD dwFlags;////该标志一般设置为0,具体请看EVC帮助
LPCSTR lpMultiByteStr;/////多字节字符串
int cbMultiByte;/////多字节字符串长度,以字节为单位,如果此值设为-1,则函数自动获得多字节字符串长度.编程中一般设置为-1
LPWSTR lpWideCharStr;/////宽字符串缓冲区指针
int cchWideChar;//////宽字符串缓冲区最大值(以字符为单位),如果传0,则函数返回转化后缓冲区大小,为字符个数
(3)MultiByteToWideChar转化实例
void MultiByte_To_WideChar_Convert()
{
//////(1)声明转换前的字符串
char chSource_Char[] = "hello world";
//////(2)调用MultiByteToWideChar,为lpWideCharStr传递NULL , cchWideChar 传递0
int iWide_Buffer_Size = MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , NULL , 0);
//////(3)声明宽字符缓冲区
WCHAR * pwchWide_Char = new WCHAR[iWide_Buffer_Size + 1];
if(pwchWide_Char == NULL)
{
AfxMessageBox(L"内存分配失败");
return;
}
memset(pwchWide_Char , 0 , (iWide_Buffer_Size + 1)*sizeof(WCHAR));
//////(4)转化
MultiByteToWideChar(CP_ACP , 0 , chSource_Char , -1 , pwchWide_Char , iWide_Buffer_Size);
}
WideCharToMultiByte()用法和上例类似。希望能够对初学者有所帮助,以免犯我犯过的错误。我做ce时间不长,如果有什么地方写的不对,希望大家能批评指正。
相关文章推荐
- wince编程心得(一)------wince字符转换函数及应用
- wince编程心得(一)------wince字符转换函数及应用
- HBase在数据统计应用中的使用心得
- AD10应用心得
- C# PropertyGrid控件应用心得(转载)
- j2me使用ksoap2开发webservice应用心得。参加比赛不明白可以看看,顺便给我增加人气。呵呵!!!
- GDI+ 在Delphi程序的应用 -- Matrix应用心得(转)
- poppler 心得 windows下的mfc应用和非mfc
- JFreeChart在JSP开发中的应用心得
- 关于网站应用中XML的使用心得[原创]
- Android应用测试工具使用的一些心得记录
- STM32库函数编程学习心得:assert_param的应用
- 敏捷开发在项目中的应用心得
- Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸
- 传智播客 韩顺平 php视频教程 笔记心得 zend.framework.第15讲.综合应用-购物车1
- 韩顺平 php视频教程 笔记心得 zend.framework.第17讲.综合应用-购物车3
- 应用高德地图心得
- Windows 8系统平台上应用软件安装心得
- try-catch应用心得
- 心得1--filte(过滤器)简介及应用