首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

gb2312怎么转换汉字,求指点.

2013-02-04 
gb2312如何转换汉字,求指点.....假如现有我收到16进制 BO A1这2个字节我怎样才能输出汉字‘啊’呢。如果我接

gb2312如何转换汉字,求指点.....
假如现有我收到16进制 BO A1这2个字节我怎样才能输出汉字‘啊’呢。

如果我接收的不只是BO A1还有别的汉字,是不是需要把gb2312的码表都写到程序里面。

是写个函数来实现还是直接就可以用C++提供的函数来实现?

小弟新手,请大家见谅。 c++
[解决办法]
直接输出就可以了, printf啊
[code=c]
#include <stdio.h>

int main(void)
{
    char s[] = { 0xb0, 0xa1, 0x00 };

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

    return 0;
}
[/code
[解决办法]
如果你的系统本身就是GB2312或者是GBK的内码,那么直接输出即可;如果你的系统是其它内码的话,那么需要用iconv进行转换,例如UTF-8需要这样做:


#include <iconv.h>
#include <string.h>
#include <stdio.h>

//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;

cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
memset(outbuf,0,outlen);
if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}

int main(void)
{
    char gb2312[] = { 0xb0, 0xa1, 0x00 };
    char utf8[81];

    g2u(gb2312, strlen(gb2312), utf8, 80);
    printf("%s\n", utf8);

    return 0;
}


[解决办法]
对电脑而言没有汉字,只有二进制字节;对人脑才有汉字。
比如:啊 GBK:0xB0 0xA1,Unicode:0x4A 0x55,UTF-8:0xE5 0x95 0x8A

热点排行