当前位置:C++技术网 > 资讯 > win32通用函数总结:5 CharToOem,CharToOemBuff

win32通用函数总结:5 CharToOem,CharToOemBuff

更新时间:2015-12-23 20:59:53浏览次数:1+次

BOOL CharToOem(LPCTSTR lpszSrc,LPSTR lpszDst);
参数解释:lpszSrc是以空为结尾的const字符串,lpszDst是以空为结尾的char字符串,用于接收转换结果的OEM字串。
返回值:总是返回非零,除非lpszDst和lpszSrc同指一个地址,那么函数返回零。
函数作用:将一个字符串从ANSI字符集转换到OEM字符集。(关于OEM字符集的说明请看http://www.cnblogs.com/KevinYang/archive/2010/06/18/1760597.html)
注意:lpszDst的长度必须大于等于lpszSrc,不要忘记结束符的存在,否则程序运行后会出现Run-Time Check Failure #2 - Stack around the variable 'lpszDst' was corrupted.这是因为数组越界了。
代码例子:
#include <windows.h>
#include <tchar.h>
int main()
{
LPCTSTR lpszSrc = _T("C++技术网");
CHAR lpszDst[10] = "";
CharToOem(lpszSrc, lpszDst);
MessageBoxA(NULL, lpszDst, "", MB_OK);//显示C++技术网
return 0;
}
BOOL CharToOemBuff(LPCTSTR lpszSrc,LPSTR lpszDst,DWORD cchDstLength);
参数解释:lpszSrc是以空为结尾的const字符串,lpszDst是以空为结尾的char字符串,用于接收转换结果的OEM字串,cchDstLength是指字串lpszSrc中想转换的字符数量
返回值:总是返回非零,如果lpszDst和lpszSrc同指一个地址,那么函数返回零。
函数作用:将一个字符串从ANSI字符集转换到OEM字符集。CharToOemBuff允许我们指定字串中需转换的字符数量
注意:这里涉及到字符长度和字节长度的大小比较,lpszDst要大于cchDstLength对应的字符大小(中文字符占两个字节),就代码例子而言,项目是unicode字符集,lpszSrc的字符长度是7,字节长度是10(不要忘记结束符),所以cchDstLength应该要大于等于7,而lpszDst的字节长度应该要大于等于10,如果cchDstLength=8,则lpszDst应该为11,多出的字符占用的字节长度是1,以此类推,如果cchDstLength=9,则lpszDst应该为12,如果项目是多字节字符集,那么情况又会不一样,大家可以去尝试一下。
代码例子:
#include <Windows.h>
#include <tchar.h>
int main()
{
LPCTSTR lpszSrc = _T("C++技术网");
CHAR lpszDst[10] = "";
DWORD cchDstLength = 6;
CharToOemBuff(lpszSrc, lpszDst, cchDstLength);
MessageBoxA(NULL, lpszDst, "", MB_OK);//显示C++技术网
return 0;
}
可能有些地方描叙不准确或者理解有错误的地方,希望大家能提出来,我会好好改进的。