unreal游戏,unreal教学,unreal素材

超级管理员

81

帖子

0

回复

230

积分

楼主
发表于 2018-02-25 00:58:35 | 查看: 29 | 回复: 0

Linux 下char转换为wchar_t

LInux下使用mbstowcs函数可以将char转化为wchar_t
函数含义:convert a multibyte string to a wide char string
说明:       The behaviour of mbstowcs depends on the LC_CTYPE category of the current locale
返回值:   The  mbstowcs() function returns the number of wide characters that make up the converted part of the wide-char-acter string, not including the terminating null wide character.  If an invalid multibyte sequence  was  encountered, (size_t) -1 is returned.

注意:wcout 与cout不要混合使用,否则会导致wchar_t的输出问题

代码:

[cpp] view plain copy

  1. #include <string.h>  

  2. #include <stdio.h>  

  3. #include <stdlib.h>  

  4. #include <wchar.h>  

  5. #include <locale.h>  

  6. #include <iostream>  

  7. using namespace std;  

  8.   

  9.   

  10. // 将char类型转化为wchar  

  11. // src:  源  

  12. // dest: 目标  

  13. // locale: 环境变量的值,mbstowcs依赖此值来判断src的编码方式  

  14. // 运行成功返回0 否则返回-1  

  15. //  

  16. int ToWchar(char* &src, wchar_t* &dest, const char *locale = "zh_CN.utf8")  

  17. {  

  18.   if (src == NULL) {  

  19.     dest = NULL;  

  20.     return 0;  

  21.   }  

  22.   

  23.   // 根据环境变量设置locale  

  24.   setlocale(LC_CTYPE, locale);  

  25.   

  26.   // 得到转化为需要的宽字符大小  

  27.   int w_size = mbstowcs(NULL, src, 0) + 1;  

  28.   

  29.   // w_size = 0 说明mbstowcs返回值为-1。即在运行过程中遇到了非法字符(很有可能使locale  

  30.   // 没有设置正确)  

  31.   if (w_size == 0) {  

  32.     dest = NULL;  

  33.     return -1;  

  34.   }  

  35.   

  36.   wcout << "w_size" << w_size << endl;  

  37.   dest = new wchar_t[w_size];  

  38.   if (!dest) {  

  39.       return -1;  

  40.   }  

  41.   

  42.   int ret = mbstowcs(dest, src, strlen(src)+1);  

  43.   if (ret <= 0) {  

  44.     return -1;  

  45.   }  

  46.   return 0;  

  47. }  

  48.   

  49. int main()  

  50. {  

  51.   char* str = "中国123";  

  52.   wchar_t *w_str ;  

  53.   ToWchar(str,w_str);  

  54.   wcout << w_str[0] << "--" << w_str[1] << "--" << w_str[2];  

  55.   delete(w_str);  

  56.   return 0;  

  57. }  




上一篇:char与TCHAR相互转化 下一篇:TCHAR 转string
您需要登录后才可以回帖 登录 | 立即注册

Copyright © 2017-2018 Scouther Group.All rights reserved.