目前,我们接触的汉字编码主要包括GBK和GB2312。其中,GB2312又称国标码,它是一个简化字的编码规范,也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。而GBK是GB2312的扩展,是向上兼容的,GB2312中的汉字的编码与GBK中汉字的相同,只不过GBK中还包含繁体字的编码。GBK中每个汉字仍然占用两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。因此,下面的代码也是在使用GB2312或GBK编码的环境下测试通过。

 1 //全角转半角
 2 void sbc_to_dbc(char *sbc, char *dbc)
 3 {
 4     for(; *sbc; ++sbc)
 5     {
 6         if((*sbc & 0xff) == 0xA1 && (*(sbc + 1) & 0xff) == 0xA1)        //全角空格
 7         {
 8             *dbc++ = 0x20;
 9             ++sbc;
10         }
11         else if((*sbc & 0xff) == 0xA3 && (*(sbc + 1) & 0xff) >= 0xA1 && (*(sbc + 1) & 0xff) <= 0xFE)    //ASCII码中其它可显示字符
12             *dbc++ = *++sbc - 0x80;
13         else
14         {
15             if(*sbc < 0)    //如果是中文字符,则拷贝两个字节
16                 *dbc++ = *sbc++;
17             *dbc++ = *sbc;
18         }
19     }
20     *dbc = 0;
21 }
22
23 //半角转全角
24 void dbc_to_sbc(char *dbc, char *sbc)
25 {
26     for(; *dbc; ++dbc)
27     {
28         if((*dbc & 0xff) == 0x20)    //半角空格
29         {
30             *sbc++ = 0xA1;
31             *sbc++ = 0xA1;
32         }
33         else if((*dbc & 0xff) >= 0x21 && (*dbc & 0xff) <= 0x7E)
34         {
35             *sbc++ = 0xA3;
36             *sbc++ = *dbc + 0x80;
37         }
38         else
39         {
40             if(*dbc < 0)    //如果是中文字符,则拷贝两个字节
41                 *sbc++ = *dbc++;
42             *sbc++ = *dbc;
43         }
44     }
45     *sbc = 0;
46 }

转载于:https://www.cnblogs.com/leemang/p/3215499.html

全角和半角相互转换(C语言实现)相关推荐

  1. Python实现全角与半角相互转换

    全角与半角转换在处理汉语语料中会经常出现,这里分别说明汉字.数字.字母的unicode编码范围.以及全角与半角的转换方法.最后给出wiki上全角和半角的编码对照表.这里Python需要用Python3 ...

  2. Java实现全角和半角字符相互转换

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  3. java半角转全角_JAVA 半角全角相互转换

    /** * 半角转全角 * @param input String. * @return 全角字符串. */ public static String ToSBC(String input) { ch ...

  4. Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

  5. java 全角_Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

  6. c# 中文字符(全角、半角)通用处理

    声明:本文仅提供一种编程思路,所提供代码仅供参考,如需使用,请自行完善.我们在做程序的的时候经常要处理用户输入,作为我们的主要语言中文,经常会出现全角.半角的问题,这会在查询时给我们带来很多麻烦.本文 ...

  7. JS对全角与半角的验证,相互转化以及介绍

    1.什么是全角和半角? 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节. 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都 ...

  8. 【转】刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK等)以及全角、半角、CJK

    一.概述 1. 英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够了(2^8 = 256).但其他一些文字不止这么多字符,比如中文中的汉字就多达10多万个,一个字节只 ...

  9. java全角数字_Java全角、半角字符的关系以及转换

    如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...

最新文章

  1. python函数中的两个坑(面试经常有)
  2. 判断字典中指定key是否存在
  3. 【报错笔记】Navicat连接数据库显示2003错误,无法连接到数据库
  4. android 播放声音 停止其他,Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题,暂停其他的播放...
  5. LeetCode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复(vector + 哈希)
  6. SqlServer2012 File Table文件表
  7. PowerDesigner通过jdbc连接MySQL实现逆向工程步骤
  8. 6. 分类图显示和保存
  9. 设计模式--策略模式(C++实现)
  10. oracle 流标和sql效率,Oracle 中流标使用实例
  11. ASP.NET Trick文章系列--使用State Server管理Session状态的另类经济用法
  12. 【路由和交换之H3C自导自演】
  13. (转)微服务架构的理论基础 - 康威定律
  14. Java基础系列-《流程控制--循环结构》
  15. 火车头采集html5游戏,火车采集器7.6-火车头数据采集平台1.6教程
  16. 【情感分析:挖掘观点、情感和情绪】读书笔记-02
  17. 轻量级网络综述 — 主干网络篇
  18. 又一巨头告急!曾年赚500亿,如今连房租都付不起!
  19. Unity 3.Adventure Game tutorial(事件系统、动画状态机、库存、条件、反应、交互、游戏状态)
  20. android获取root权限的命令

热门文章

  1. フローのパラメータについて
  2. 阿里组织新调整:张勇兼任云业务总裁“敏捷组织”是内核
  3. 天刀 服务器状态,天刀实用技巧_天刀各种游戏小技巧_玩游戏网
  4. 在网页上实现大华视频监控摄像头在线
  5. nodejs 将对象转化为query(URLSearchParams)
  6. 优化 ASP 应用程序和 VBScript 的技巧。
  7. python数据中元素可以改变的是_下列Python数据中其元素可以改变的是( )。 (2.0分)_学小易找答案...
  8. RocketMq之消费方式
  9. python使用爬虫写一个自己的翻译器(带图像界面)
  10. 关于 CSS,你该了解这些