MultiByteToWideChar

                    MultiByteToWideChar

 

    前些日子了解了一下UTF-8怎么变UNICODE,之后又想到怎么把GB2312变成UNICODE,发现WINAPI函数可以帮我们做这个动作,根本没必要知道GB2312编码表啊,直接就可以转,估计是WINDODS的API函数把他封装起来了。

   由于这个在BXC有人写过这样的TOOL,所以没有必要写了,只要知道他是怎么实现的就行了,看了下面的CODE你就知道,怎么实现GB2312变成 UNICODE,值得一提的时候,在转换的时候,必要要先用这个函数得到这个ANSI(GB2312)实际上有多少个UNICODE字符,之后再申请这多个空间。

 

 

/

 

#include "stdafx.h"
#include <string.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

int main(void)
{
      char  cword[20] = {"中华人民共和国"};       //定义一个GB2312的字串
      DWORD num= MultiByteToWideChar(CP_ACP,0,cword,-1,NULL,0); 

     //计算这个GB2312实际有几个字组成


      WCHAR *wword;                             //定义一个UNICODE的指针

      wword= (WCHAR*)calloc(num,sizeof(WCHAR));//动态的申请空间存字

      if(wword == NULL)              //判断申请到空间没有
      {
          free(wword);
       }

      memset(wword, 0, num*sizeof(WCHAR));       //初始化动作

      MultiByteToWideChar(CP_ACP,0, cword, -1, wword, num); 

      //把GB2312变成UNICODE

      free(wword);
      return 0;
}

 

 

 

 

API 函数 MultiByteToWideChar
    第一个参数为代码页, 用 GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文
   

    第二个参数为选项,一般用 0 就可以了
   

    第三个参数为 ANSI 字符串的地址, 这个字符串是第一个参数指定的语言的 ANSI 字符串 (AnsiString)
   

    第四个参数为 ANSI 字符串的长度,如果用 -1, 就表示是用 0 作为结束符的字符串
   

    第五个参数为转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度
   

    第六个参数为转化生成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。

 

 

参考资料:

 

http://blog.sina.com.cn/s/blog_4d25c9870100cnqo.html

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值