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;
}