http://blog.sina.com.cn/s/blog_8f3985400100tjes.html
1.全角是一种电脑字符,且每个全角字符占用两个标准字符(或半角字符)位置。 每个普通字符(或半角字符)只占用一字节的空间(一字节有8位,共256个编码空间),而汉语、日语、及朝鲜文等象形字语言的字库量远大于256个,所以改用两个字节来储存。同时,也是因为中日韩等象形文字的书写习惯,如果统一使用全角字符的话,排列起来也显得整齐。 为了排列整齐,英文和其它拉丁文的字符和标点也提供了全角格式。 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符。 通常的英文字母、数字键、符号键都是半角的,半角的显示内码都是一个字节。在系统内部,以上三种字符是作为基本代码处理的,所以用户输入命令和参数时一般都使用半角。 全角占两个字节,半角占一个字节。半角全角主要是针对标点符号来说的,全角标点占两个字节,半角占一个字节,而不管是半角还是全角,汉字都还是要占两个字节。 在编程序的源代码中只能使用半角标点(不包括字符串内部的数据) 在不支持汉字等语言的计算机上只能使用半角标点(其实这种情况根本就不存在半角全角的概念)。 对于大多数字体来说,全角看起来比半角大,当然这不是本质区别。 [全角举例]AabB1234@#$%^&*;,。: [半角举例]AabB1234@#$%^&*;,.: 2.实际中,半角英文字符、标点符号等,转换为全角的过程是:将在单字节高8位设置为 0xA3 (即163),将低字节设置为该单字节字符 + 0x80(即128)----将其变为一个首位为1的8位字节,将其变为俩个个字节(即全角)。 C语言实现 字符的全角、半角转换: int fullToHalf(char *sFullStr, char *sHalfStr) { int iFullStrIndex = 0; int iHalfStrIndex = 0; int iFullStrLen = strlen(sFullStr); printf("sFullStr[%s]\n", sFullStr); for(; iFullStrIndex < iFullStrLen; iFullStrIndex++, iHalfStrIndex++){ if(sFullStr[iFullStrIndex] == 0xA3){ sHalfStr[iHalfStrIndex] = sFullStr[++iFullStrIndex]- 0x80; }else{ sHalfStr[iHalfStrIndex] = sFullStr[iFullStrIndex]; } } printf("sHalfStr:[%s]\n", sHalfStr); return 0; } int halfToFull(char *sFullStr, char *sHalfStr) { int iFullStrIndex = 0; int iHalfStrIndex = 0; int iHalfStrlen = strlen(sHalfStr); printf("sHalfStr[%s]\n", sHalfStr); for(; iHalfStrIndex < iHalfStrlen; iHalfStrIndex++, iFullStrIndex++){ if(sHalfStr[iHalfStrIndex] < 0x80){ sFullStr[iFullStrIndex] = 0xA3; sFullStr[++iFullStrIndex] = sHalfStr[iHalfStrIndex] + 0x80; }else{ sFullStr[iFullStrIndex] = sHalfStr[iHalfStrIndex]; } } printf("sFullStr:[%s]\n", sFullStr); return 0; }