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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值