免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3986 | 回复: 11
打印 上一主题 下一主题

[C] 询问这段代码的原理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-29 23:07 |只看该作者 |倒序浏览
下面这段代码是从网上来的,用于得到一行中文的每个中文的首个字母,但就是怎么得到首个字符时通过getpychar函数来实现,想知道是什么原理得到,所以就贴了这些代码,询问知道的人?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>

gchar getpychar(guchar uword0 , guchar uword1)
{
        gchar pychar;

        int i1 = (short)(uword0 - '\0');
        int i2 = (short)(uword1 - '\0');

        int tmp = i1 * 256 + i2;

        if(tmp >= 45217 && tmp <= 45252) pychar = 'A';
        else if(tmp >= 45253 && tmp <= 45760) pychar = 'B';
        else if(tmp >= 45761 && tmp <= 46317) pychar = 'C';
        else if(tmp >= 46318 && tmp <= 46825) pychar = 'D';
        else if(tmp >= 46826 && tmp <= 47009) pychar = 'E';
        else if(tmp >= 47010 && tmp <= 47296) pychar = 'F';
        else if(tmp >= 47297 && tmp <= 47613) pychar = 'G';
        else if(tmp >= 47614 && tmp <= 4811 pychar = 'H';
        else if(tmp >= 48119 && tmp <= 49061) pychar = 'J';
        else if(tmp >= 49062 && tmp <= 49323) pychar = 'K';
        else if(tmp >= 49324 && tmp <= 49895) pychar = 'L';
        else if(tmp >= 49896 && tmp <= 50370) pychar = 'M';
        else if(tmp >= 50371 && tmp <= 50613) pychar = 'N';
        else if(tmp >= 50614 && tmp <= 50621) pychar = 'O';
        else if(tmp >= 50622 && tmp <= 50905) pychar = 'P';
        else if(tmp >= 50906 && tmp <= 51386) pychar = 'Q';
        else if(tmp >= 51387 && tmp <= 51445) pychar = 'R';
        else if(tmp >= 51446 && tmp <= 52217) pychar = 'S';
        else if(tmp >= 52218 && tmp <= 52697) pychar = 'T';
        else if(tmp >= 52698 && tmp <= 52979) pychar = 'W';
        else if(tmp >= 52980 && tmp <= 53640) pychar = 'X';
        else if(tmp >= 53689 && tmp <= 54480) pychar = 'Y';
        else if(tmp >= 54481 && tmp <= 55289) pychar = 'Z';
        else pychar = ' ';

        return pychar;
}

gchar *getpystring(const gchar *in)
{
        gsize inlen , olen , i , j = 0;
        gchar *gword = g_convert(in , strlen(in)
                        , "gb2312" , "utf8" , &inlen , &olen , NULL);

        guchar *uword = (guchar*)gword;
        gchar *out = (gchar*)malloc(olen);

        memset(out , 0 , olen);

        for(i = 0 ; i < olen ; i++){
                if(uword[i] >= 0xa1){
                        if(uword[i] != 0xa3){
                                out[j++] = getpychar(uword[i] , uword[i + 1]);
                                i ++;
                        }
                }else{
                        out[j++] = (gchar)uword[i];
                }
        }

        return out;

}

int main(int argc , char **argv)
{
        printf("%s\n" , getpystring("linux是一个出色的操作系统");
        return 0;

}

论坛徽章:
0
2 [报告]
发表于 2010-11-29 23:19 |只看该作者
[code] some codes [/code]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2010-11-30 08:55 |只看该作者
数字是内码,汉字表按拼音排序的(不考虑多音字)

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
4 [报告]
发表于 2010-11-30 08:58 |只看该作者
去看看GB2312的码表就知道了

论坛徽章:
0
5 [报告]
发表于 2010-11-30 21:22 |只看该作者
回复 4# noword2k
搜了个gb2312的码表,不过没有看懂,链接如下 http://ash.jp/code/cn/gb2312tbl.htm

论坛徽章:
0
6 [报告]
发表于 2010-11-30 23:52 |只看该作者
回复 3# hellioncu
搜索了资料,汉字跟拼音没有直接关系,而汉字内码根拼音有直接关系。想知道根据内码能得到汉字的全拼音

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2010-12-01 08:23 |只看该作者
回复  hellioncu
搜索了资料,汉字跟拼音没有直接关系,而汉字内码根拼音有直接关系。想知道根据内码能得 ...
wolaiye05 发表于 2010-11-30 23:52



    要得到全拼音,找个拼音码表吧,靠那个函数没戏

论坛徽章:
0
8 [报告]
发表于 2010-12-01 09:36 |只看该作者
回复 7# hellioncu
所谓的拼音码表是不是汉字的拼音跟汉字的编码是对应的,还是汉字拼音跟汉字的内码是对应的?好像汉字有很多码说法。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2010-12-01 09:40 |只看该作者
回复  hellioncu
所谓的拼音码表是不是汉字的拼音跟汉字的编码是对应的,还是汉字拼音跟汉字的内码是对应 ...
wolaiye05 发表于 2010-12-01 09:36



    就是拼音输入法用的码表,以前Windows下有工具处理码表的

论坛徽章:
0
10 [报告]
发表于 2010-12-01 09:44 |只看该作者
估计编码是按拼音顺序编码的吧

比如 啊 :0000 奥 0001
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP