函数setlocale()的介绍与单字符宽字符的互相转换

函数: setlocale()

语法:string setlocale(string category, string locale);

用法说明:

本函数用来配置地域的信息。参数 category 有下列的选择:

 

  • LC_ALL 包括下面的全项选项都要。
  • LC_COLLATE 配置字符串比较,PHP 目前尚未实作出来本项。
  • LC_CTYPE 配置字符类别及转换。例如全变大写strtoupper()。
  • LC_MONETARY 配置金融货币,PHP 目前尚未实作。
  • LC_NUMERIC 配置小数点后的位数。
  • LC_TIME 配置时间日期格式,与strftime()合用。

而参数 locate 若是空字符串 "",则会使用系统环境变量的 locate 或是 LANG 的值。若 locate 为零,则不会改变地域化配置。返回新的地域,若系统尚未实作则返回 false。

接下来是单字符宽字符的互相转换

首先要介绍要转换的两个函数:

size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);   //转换单字符串为宽字符串

size_t wcstombs(char *mbstr,    const wchar_t *wcstr,    size_t count );//转换宽字符串为单字符串
  例如:
  CString str = L"hello";
  char sss[20];
  wcstombs(sss,str.GetBuffer(),20);                          //转换宽字符为单字符
 
  stl 宽字符到 单字符转换
  wstring  str = L"Hello";
  std::wstring::size_type len = str.length();
  std::string s(len*2,0);
  size_t total = wcstombs(&s[0],str.c_str(),len*2);
  s[total] = ''''\0''
  return s;


  mbtowc 和 wctomb 是单个字符相互转换
  int len;
  setlocale (LC_ALL, "chs");    //设置为简体中文环境
  wchar_t wc = L''''中''
  wprintf(L"1个宽中文字符:%c \n",wc);
  char* p = "中";
  len = mbtowc (&wc, p, MB_LEN_MAX);
  wprintf(L"单字符串转换为1个宽字符:%c 长度: %d\n",wc,len);
  char pcmb[MB_LEN_MAX];
  len = wctomb (pcmb, wc);
  pcmb[len] = 0;
  printf("宽字符转换为单字符串:%s 长度:%d\n",pcmb,len);
 
  BYTE  utf8[1024];              //utf8 字符串
  wchar_t wstr[1024];
  char mstr[1024];
  //UTF-8 转换为宽字符
  MultiByteToWideChar( CP_UTF8, 0, utf8,1024, wstr,  sizeof(wstr)/sizeof(wstr[0]) );
  WideCharToMultiByte( CP_ACP,0,wstr,-1,mstr,1024,NULL,NULL );
 
  注:mbstowcs()是C库函数,要正确的设置Locale才能进行转换,MultiByteToWideChar()是win32函数,别搞混了!
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值