ANSI与宽字符转换

C语言

ANSI转转宽字符-mbstowcs

       char test[64];

       sprintf(test, "hello char! \n");

       printf("%s", test);

 

       wchar_t testT[64];

       int nRet = mbstowcs(testT, test, sizeof(testT));

       wprintf(L"%s",testT);

宽字符转ANSI-wcstombs

       wchar_t testO[64];

       swprintf(testO, L"hello wchar ! \n");

       wprintf(L"%s",testO);

 

       char testF[64];

       wcstombs(testF, testO, sizeof(testF));

       printf("%s \n", testF);

 

 

Windows平台

 

ANSI转转宽字符:MultiByteToWideChar(UINTCodePage,

  DWORD dwFlags,

  LPCSTR lpMultiByteStr,

  int cchMultiByte,

  LPWSTR lpWideCharStr,

  int cchWideChar)

CodePage:指定执行转换的多字节字符所使用的字符集,可以使用CP_ACP

dwFlags:一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。一般取值为0时。

lpMultiByteStr:指向待转换的字符串的缓冲区。

cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。可以设置为-1,会自动判断lpMultiByteStr指定的字符串的长度

lpWideCharStr:指向接收被转换字符串的缓冲区。

cchWideChar:指定由参数lpWideCharStr指向的缓冲区的宽字节数。若此值为0,函数不会执行转换,而是返回目标缓存lpWideChatStr所需的宽字符数。

 

宽字符转ANSIWideCharToMultiByte(UINT CodePage,

  DWORD dwFlags,

  LPCWSTR lpWideCharStr,

  int cchWideChar,

  LPSTR lpMultiByteStr,

  int cchMultiByte,

  LPCSTR lpDefaultChar,

LPBOOL pfUsedDefaultChar)

lpDefaultCharpfUsedDefaultChar:只有当WideCharToMultiByte函数遇到一个宽字节字符,而该字符在uCodePage参数标识的代码页中并没有它的表示法时,WideCharToMultiByte函数才使用这两个参数。(通常都取值为NULL

如果宽字节字符不能被转换,该函数便使用lpDefaultChar参数指向的字符。如果该参数是NULL(这是大多数情况下的参数值),那么该函数使用系统的默认字符。该默认字符通常是个问号。这对于文件名来说是危险的,因为问号是个通配符。

pfUsedDefaultChar参数指向一个布尔变量,如果Unicode字符串中至少有一个字符不能转换成等价多字节字符,那么函数就将该变量置为TRUE。如果所有字符均被成功地转换,那么该函数就将该变量置为FALSE。当函数返回以便检查宽字节字符串是否被成功地转换后,可以测试该变量。

 

使用:

ANSI转宽字符

chartest[64];

sprintf(test,"hello char ! \n");

printf("%s",test);

 

wchar_ttestT[64];

intnRet = MultiByteToWideChar(CP_ACP,0,test, -1, testT,sizeof(testT));

wprintf(L"%s",testT);

 

宽字符转ANSI

wchar_t testO[64];

swprintf(testO,L"hello wchar !\n");

wprintf(L"%s",testO);

 

char testF[64];

WideCharToMultiByte(CP_OEMCP,0,testO, -1, testF,sizeof(testF),NULL,false);

printf("%s\n",testF);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开源项目TinyXml项目所涉及的字符编码说明如下: 1. TinyXml函数调用接口的字符型参数,仅支持`窄字符`格式(char*),不兼容`字符`格式(wchar_t*)。 2. TinyXml函数提供的Xml内容解析功能,仅支持以ANSI编码和UTF8编码的Xml字符串,也即`多字节编码`。 3. TinyXml函数提供的Xml内容解析功能,不支持内容以UTF16编码和UTF32编码的Xml字符串,也即`Unicode编码`。 4. UTF8编码是Unicode编码的一种实现方式,以不定个数的字节来存储一个Unicode码值,支持多国语言文字。 也即,UTF8编码在编码实现上属于`多字节编码`,在编码标准上属于`Unicode编码`。 5. 人类语言中同一个的字符,如果在各种不同的标准如ANSI编码、UTF8编码、UTF16编码和UTF32编码中都存在码值, 就可以相互转换。因为各个标准下的可编码字符容量不同,部分语言字符会在一个编码标准库下存在, 而在另外一个编码标准库下不存在,这时精确的相互转换就无法执行,但是仍然有默认字符转换。 -- 6. VC语言,当定义了宏 _UNICODE 后,_T系列宏或函数,以`字符`承载UTF16编码。 TinyXml如何提供`字符`函数接口,支持解析UTF16编码、UTF32编码标准下的Xml字符串呢? 本项目: - 新增适用于`字符`参数的函数接口,调用字符转换功能,转换为`窄字符`参数,再回调TinyXml原版接口。 - 对于以UTF16编码、或UTF32编码的Xml字符串,转换为UTF8编 --

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值