全角和半角相互转换(C语言实现)
目前,我们接触的汉字编码主要包括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编码的环境下测试通过。
//全角转半角
void sbc_to_dbc(char *sbc, char *dbc)
{
for(; *sbc; ++sbc)
{
if((*sbc & 0xff) == 0xA1 && (*(sbc + ) & 0xff) == 0xA1) //全角空格
{
*dbc++ = 0x20;
++sbc;
}
else if((*sbc & 0xff) == 0xA3 && (*(sbc + ) & 0xff) >= 0xA1 && (*(sbc + ) & 0xff) <= 0xFE) //ASCII码中其它可显示字符
*dbc++ = *++sbc - 0x80;
else
{
if(*sbc < ) //如果是中文字符,则拷贝两个字节
*dbc++ = *sbc++;
*dbc++ = *sbc;
}
}
*dbc = ;
} //半角转全角
void dbc_to_sbc(char *dbc, char *sbc)
{
for(; *dbc; ++dbc)
{
if((*dbc & 0xff) == 0x20) //半角空格
{
*sbc++ = 0xA1;
*sbc++ = 0xA1;
}
else if((*dbc & 0xff) >= 0x21 && (*dbc & 0xff) <= 0x7E)
{
*sbc++ = 0xA3;
*sbc++ = *dbc + 0x80;
}
else
{
if(*dbc < ) //如果是中文字符,则拷贝两个字节
*sbc++ = *dbc++;
*sbc++ = *dbc;
}
}
*sbc = ;
}
全角和半角相互转换(C语言实现)的更多相关文章
- Java全角、半角字符的关系以及转换
如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对 ...
- C#全角和半角转换
在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角".在汉字输入时,系统提供&quo ...
- 刨根究底字符编码之五——简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK
简体汉字编码方案(GB2312.GBK.GB18030.GB13000)以及全角.半角.CJK 一.概述 1. 英文字母再加一些其他标点字符之类的也不会超过256个,用一个字节来表示一个字符就足够 ...
- JS全角与半角转化小结
最近在做PC端网站的页面的一个表单校验,需要把全角输入转化成半角符号.之前没有了解过这些编码的知识,还是得Google一下查查资料,故简单总结一下. 什么是全角.半角 传统上,英语或拉丁字母语言使用的 ...
- JS对全角与半角的验证,相互转化以及介绍
1.什么是全角和半角? 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节. 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都 ...
- c# 中文字符(全角、半角)通用处理
声明:本文仅提供一种编程思路,所提供代码仅供参考,如需使用,请自行完善. 我们在做程序的的时候经常要处理用户输入,作为我们的主要语言中文,经常会出现全角.半角的问题,这会在查询时给我们带来很多麻烦.本 ...
- JS如何判断文字是全角还是半角
载自:http://www.php.cn/js-tutorial-362638.html 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节.半角:是指一个 ...
- 用perl对字符串进行全角转半角操作
#全角转半角 #ljl use Encode; sub CheckSBC { my ($name)=@_; my @character; my $tmpname=$name; my $headname ...
- java 全角、半角字符串转换
转自:http://www.cnblogs.com/modou/articles/2679815.html 加入了空字符串的验证 半角转全角的方法: /** * @Title: ToSBC * ...
随机推荐
- 【IOS学习基础】内存管理
1.内存几大区域 1> 栈区:局部变量(基本数据类型.指针变量). 2> 堆区:程序运行的过程中动态分配的存储空间(创建的对象). 3> BSS段:没有初始化的全局变量和静态变量. ...
- (转)DataTable添加行出现“该行已经属于另一个表”的错误!
1 DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); //为dt1创建结构 DataColumn pName = ne ...
- 泛型编程中的Concept, Model和Policy
A crude explanation Concept A set of requirements on a type, e.g. a RandomAccessible concept require ...
- nginx解决502错误
添加一个域名绑定,突然服务器就挂了.由于是接受项目,没看过服务器配置.结果nginx和mysql 都跑不起来. 平滑启动nginx失败. 检查/usr/local/nginx/sbin/nginx - ...
- mysqli连接数据库函数
<?php $mysqli=@new mysqli("localhost", "root", "123456", "xsph ...
- php数字转中文
function number2Chinese($num, $m = 1) { switch($m) { case 0: $CNum = array( array('零','壹','贰','叁','肆 ...
- Gradle templates 的使用
使用gradle 时有一些繁琐的创建工程 使用插件的步骤. 这些步骤可以使用一些gradle的模板来代替. 具体的操作步骤: 安装gradle: Prerequired: Java SDK insta ...
- 动态规划-Burst Balloons
Burst Balloons Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it ...
- Realview MDK 中不用手动开中断的原因
startup.s启动代码文件: ; Enter Supervisor Mode and set its Stack Pointer MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR ...
- AOJ 2249 Road Construction(Dijkstra+优先队列)
[题目大意] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2249 [题目大意] 一张无向图,建造每条道路需要的费用已经给出, 现 ...