用c语言怎样得到一个汉字的GB2312编码

C/C++支持的是ASCII,不过汉字编码中,GB2312与ASCII是兼容的,所以可以在C中获得汉字的GB2312编码

GB2312是两个字节的,第一字节是高八位,第二字节是低八位,比如下面的程序:
#include<stdio.h>
#include<string.h>
int main()
{
char a[5];
strcpy(a,"啊");
printf("%XH %XH\n",(unsigned char)a[0],(unsigned char)a[1]);
return 0;
}
a[0]是“啊”字的高八位,a[1]是低八位,程序运行结果是a[0]=B0 a[1]=A1,用16进制表示的,所以“啊”字的GB2312编码是B0A1了~
输出时要强制转换成unsigned char,不然就变成负数了,因为编码是以8位的无符号整数为单位的
当然也可以转成10进制啦,比如
int b;
b=(unsigned char)a[0]*256+(unsigned char)a[1];

b即为汉字的10进制GB2312编码了


%a,%A 读入一个浮点值(仅C99有效)   
%c 读入一个字符   
%d 读入十进制整数   
%i 读入十进制,八进制,十六进制整数   
%o 读入八进制整数   
%x,%X 读入十六进制整数   
%s 读入一个字符串,遇空格、制表符或换行符结束。   
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。   
%p 读入一个指针   
%u 读入一个无符号十进制整数   
%n 至此已读入值的等价字符数   
%[] 扫描字符集合   
%% 读%符号

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用iconv库中的函数进行转换,具体实现如下: ```c #include <iconv.h> #include <stdio.h> #include <stdlib.h> #include <string.h> char* gb2312_to_utf8(const char* gb2312_str) { iconv_t cd = iconv_open("UTF-8", "GB2312"); if (cd == (iconv_t)-1) { perror("iconv_open"); return NULL; } size_t in_len = strlen(gb2312_str); size_t out_len = in_len * 4; // 一个汉字最多占用4个字节 char* utf8_str = (char*)malloc(out_len + 1); memset(utf8_str, , out_len + 1); char* in_buf = (char*)gb2312_str; char* out_buf = utf8_str; if (iconv(cd, &in_buf, &in_len, &out_buf, &out_len) == (size_t)-1) { perror("iconv"); free(utf8_str); utf8_str = NULL; } iconv_close(cd); return utf8_str; } int main() { const char* gb2312_str = "\xb2\xe2\xca\xd4\xca\xb1\xbc\xe4"; char* utf8_str = gb2312_to_utf8(gb2312_str); if (utf8_str) { printf("%s\n", utf8_str); free(utf8_str); } return ; } ``` 其中,`gb2312_to_utf8`函数接收一个GB2312编码的字符串,返回一个UTF-8编码的字符串。该函数内部使用`iconv`函数进行编码转换,具体步骤如下: 1. 调用`iconv_open`函数打开一个转换句柄,将目标编码设为UTF-8,源编码设为GB2312。 2. 计算输入字符串的长度,并为输出字符串分配足够的空间。 3. 调用`iconv`函数进行编码转换,将输入字符串的内容转换为UTF-8编码,并存储到输出字符串中。 4. 调用`iconv_close`函数关闭转换句柄。 5. 返回输出字符串的指针。 在`main`函数中,我们调用`gb2312_to_utf8`函数将一个GB2312编码的字符串转换为UTF-8编码,并打印输出结果。注意,输出结果中的汉字已经被正确地转换为了UTF-8编码

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值