• C语言中两位ASCII码可以表示汉字


    最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析。

    **********************************************************************

    参考资料一:http://zhidao.baidu.com/link?url=YDoT2OLdKEElDQ86Ce_wEtKt9Nrn2yJ8TIb9JkasvaLvi8D66RRwSvxn2DkFRVM_OOnq4fCoJPA-19AmpPeypa

    “206 210 176 174 214 236 187 219 ” 是 ASCII码 , 编辑成中文是什么 ???

    提问者采纳:


    非常无语啊。。。我们是很有敬业精神的。。意为"我爱朱慧"

    ********************************************************

    现在开始分析:

    资料一说:

    “206 210 176 174 214 236 187 219 ” 是 ASCII码 , 编辑成中文是“我爱朱慧”。

    写成代码:

    #include<stdio.h>
    int main(void)
    {
        printf("%c%c%c%c%c%c%c%c",206,210,176,174,214,236,187,219);
        printf("
    ");
        return 0;
    }

    运行结果:

    看到这里,好像明白了。

    汉字是双字节,且两个数字可以 编码一个汉字。

    总结下就是:

    206+210=我

    176+174=爱

    214+236=朱

    187+219=慧

    呵呵,到这里就没必要再深究啦。

    可是,突发奇想,想找到用哪两个数字可以组合出“你”字?

    想搞出“我爱你”编码!嘿嘿。

    于是,我进行了大量测试。没办法,不是很懂这个,只好用循环来做啦。

    编写代码如下。

    测试发现129到247有编码汉字,其余范围无法编码成汉字。

    测试代码一:

    #include<stdio.h>
    int main(void)
    {
        int i;
        for(i=129;i<=247;i++)
        printf("%d+%d=%c%c ",i,i,i,i);
        printf(" ");
        return 0;
    }

    运行结果:

    测试代码二:

    #include<stdio.h>
    int main(void)
    {
        int i;
        for(i=129;i<=247;i++)
        printf("%d+%d=%c%c	",i,i+1,i,i+1);
        printf("
    ");
        return 0;
    }

    运行结果:

    测试代码三:

    #include<stdio.h>
    int main(void)
    {
        int i;
        for(i=129;i<=247;i++)
        printf("%d+%d=%c%c	",i,i+2,i,i+2);
        printf("
    ");
        return 0;
    }

    ......

    以此类推,测试了几组代码后总结如下:

    206+210=我
    176+174=爱
    184+184=父
    208+208=行
    193+193=亮
    183+183=贩
    198+198=破
    131+131=傻
    188+188=技
    177+177=北
    180+180=创
    181+181=档
    182+182=抖
    185+185=构
    186+186=汉
    187+187=换
    191+191=靠
    196+196=哪
    195+195=妹
    202+202=适
    197+197=排
    200+200=热
    214+214=种
    199+199=乔
    213+213=照
    199+199=乔
    204+204=烫
    192+192=览
    180+181=吹
    181+182=刀
    176+177=氨
    204+205=掏
    206+207=蜗
    192+193=懒
    187+188=患
    182+183=斗
    185+186=购
    190+191=究
    191+192=坷
    197+198=牌
    180+181=吹
    183+184=犯
    193+194=谅
    194+195=旅
    198+199=魄
    199+200=侨
    203+204=颂
    206+207=蜗
    207+208=闲
    208+209=醒
    209+210=岩
    176+178=安
    177+179=背
    178+180=泊
    179+181=车
    180+182=炊
    183+185=饭
    184+186=负
    185+187=够
    186+188=杭
    187+189=唤
    188+190=季
    190+192=纠
    195+197=门
    198+200=迫
    199+201=巧
    200+202=仁
    201+203=伤
    203+205=送
    204+206=涛
    205+207=拖
    208+210=幸
    210+212=以
    211+213=诱
    212+214=灾
    213+215=兆
    214+216=重
    215+217=踪
    176+179=俺
    177+180=贝
    178+181=驳
    181+184=蹈
    182+185=豆
    183+186=泛
    184+187=富
    185+188=辜
    186+189=航
    193+196=聊
    194+197=屡
    195+198=闷
    196+199=那
    200+203=人
    201+204=商
    202+205=释
    203+206=宋
    209+212=言
    210+213=艺
    211+214=又
    212+215=宰
    217+220=余
    176+180=按
    178+182=捕
    179+183=撤
    181+185=倒
    182+186=逗
    188+192=祭
    195+199=们
    197+201=派
    200+204=忍
    201+205=赏
    202+206=饰
    212+216=载
    213+217=召
    214+218=众
    177+182=倍
    181+186=岛
    183+188=芳
    214+219=舟
    215+220=总
    212+217=再
    210+215=易
    208+213=姓
    207+212=显
    190+185=久
    176+182=岸
    180+186=春
    182+188=都
    183+189=方
    200+206=任
    201+207=上

    找了半天都没找到“你”,汗,真的累了。

    又百度,看看有没有好的其他便捷的方法。

    搜索了半天,终于找到了资料二。

     *****************************************************************************

    参考资料二:http://zhidao.baidu.com/link?url=TyO1WecgunJH_ZOeeSqX1o8O8QPxga2B7JsMrQRzWajNs7O8Nh-g-Yr3B-zzAV1vO_vDqcn6qNDVqj8DwHDH2q

    题目:

    C语言中两位ASCII码可以表示汉字(如202,214表示手)请问两位ASCII怎么与GB2312中的区位码相对应

    “啊”是国标码中的第一个是1601,用ASCII码怎么表示它

    答案:

    #include<stdio.h>int main(void)
    {
    char s[]="啊";//汉字在C/C++中是用2个字节表示的,而对应的ASCII码则是两个负数。 char m[3]; printf("%d %d ",s[0],s[1]); /*注释 s[0]=-80,s[1]=-95 注释*/ m[0]=-80; m[1]=-95; m[2]=0; puts(m);//两个字节连起来凑成一个汉字。 }

    运行结果:

     *********************************************************************************************************

    于是,我模仿资料二,找出汉字”你“的编码。

    编写下列代码:

    #include<stdio.h>
    int main(void)
    {
        char s[]="你";//汉字在C/C++中是用2个字节表示的,而对应的ASCII码则是两个负数。
        char m[3];
        printf("%d %d
    ",s[0],s[1]);
        m[0]=-60;
        m[1]=-29;
        m[2]=0;
        puts(m);//两个字节连起来凑成一个汉字。
        return 0;
    }

    运行结果:

    再修改代码:

    #include<stdio.h>
    int main(void)
    {
        char s[]="你";//汉字在C/C++中是用2个字节表示的,而对应的ASCII码则是两个负数。
        char m[3];
        printf("%c%c
    ",s[0],s[1]);
        m[0]=-60;
        m[1]=-29;
        m[2]=0;
        puts(m);//两个字节连起来凑成一个汉字。
        return 0;
    }

    运行结果:

    好了,大功告成了!哈哈,终于搞出来了。

    最终完善代码:

    方法一:

    #include<stdio.h>
    int main()
    {
     int i;
     printf("%c%c%c%c%c%c
    ",206,210,176,174,-60,-29);
     return 0;
    }

    感谢zhykin前辈提供的第二种方法:

    #include<stdio.h>
    int main()
    {
     int i;
     printf("%c%c%c%c%c%c
    ",206,210,176,174,196,227);
     return 0;
    }

    运行结果:

    今天上博客,发现犯了低级错误,很抱歉,手误,把I写成了L。

    还有很感谢各位前辈的指点和教诲,在下定当虚心努力改进。

     感谢zhykin前辈的指教,一语惊醒梦中人,使我对这个编码了解的更深了。

      这里引用“zhykin”前辈的话总结下:

    都是字符256余数的关系,“我”可以表示成206,210,也可以表示成-50,-46;同理“你”也可以是196,227。

    “我”可以用206,210表示也可以用-50,-46表示。

    “你”可以用196,227表示也可以用-60,-29表示. 

    再次对zhykin前辈表示衷心的感谢!

    汗,刚一好友提醒了下,再次发现问题,原来以上都是我的误解,对此表示抱歉。

    这原来是GBK编码。

    GBK汉字编码表:

    参考博文:http://blog.sina.com.cn/s/blog_8184e033010109ug.html

    比如:“命”的GBK编码为:0xC3,0xFC

     证明代码:

    #include<stdio.h>
    int main()
    {
     int i;
     printf("%c%c
    ",0xC3,0xFC);
     return 0;
    }

    运行结果如下:

    在下学艺不精,对此误导了大家,造成错误影响深感抱歉!

    在此公开表示道歉!


    最后奉上一个软件小工具,可以定制你的专属表白代码

    下载地址:https://download.csdn.net/download/hadues/11107523

     

  • 相关阅读:
    Xcode ARC,非ARC混搭
    Xcode GData库解析XML
    NSThread
    自定义UITableViewCell中的button实现视图切换
    UITableView
    iOS事件响应链
    结构体和NSData相互转换
    UIView的transform属性
    javascript垃圾回收机制
    ios8 滚动事件解放了
  • 原文地址:https://www.cnblogs.com/xingyunblog/p/3764002.html
Copyright © 2020-2023  润新知