Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > unicode 如何转换为ASCII
【标  题】:unicode 如何转换为ASCII
【关键字】:unicode,ASCII
【来  源】:http://blog.csdn.net/Jason009/archive/2006/09/28/1299517.aspx

unicode 如何转换为ASCII

Your Ad Here
基础类
unicode 如何转换为ASCII
程序在FressBSD/Linux上调试通过,Windows 用户只要修改几个变量类型和头文件即可  

说明:函数名称  
int strUnicode2GB(char *strSourcer, char *strDest,int n)  

转换Unicde字符串到GB码,返回汉字数  
输入( Unicode 源串,GB2312/ASCII混合编码串,Unicode字节数 必须是偶数!!!)  

[code:1:0a0b72ed53] 

#include <sys/types.h>  

const unsigned short int Unicode_GB2312[][2] =  
{  

/*Unicode ,GB||ASCII ,MEMO*/  
0x0000,0x0040,/* 0 COMMERCIAL AT @ */  
0x0001,0x00A3,/* 1 POUND SIGN £ */  
0x0002,0x0024,/* 2 DOLLAR SIGN $ */  
0x0003,0x00A5,/* 3 YEN SIGN ¥ */  
0x0004,0x00E8,/* 4 LATIN SMALL LETTER E WITH GRAVE è */  

.............  
.............  
码表太长了 请尽量通过 Google 查询,多的是  
或者通过 stevenkoh@sohu.com 向我索取  

0xFF5C,0xA3FC,/* '|' -> 65372 */  
0xFF5D,0xA3FD,/* '}' -> 65373 */  
0xFF5E,0xA1AB,/* '~' -> 65374 */  
0xFFE0,0xA1E9,/* '¢' -> 65504 */  
0xFFE1,0xA1EA,/* '£' -> 65505 */  
0xFFE3,0xA3FE,/* ' ̄' -> 65507 */  
0xFFE5,0xA3A4,/* '¥' -> 65509 */  


};  

u_int16_t Unicode2GBcode(u_int16_t iUnicode)  
{  
int i,j,n;  

switch (iUnicode){  
case 0x0002:  
return 0x24;  
break;  
case 0x000a:  
return 0xa;  
break;  
case 0x000d:  
return 0xd;  
break;  
case 0x0040:  
return 0xA1;  
break;  
}  

if ((iUnicode>=0x20&&iUnicode<=0x5a)||(iUnicode>=0x61&&iUnicode<=0x7a)) return iUnicode;  


for (i=0,j=0,n=sizeof(Unicode_GB2312)/sizeof(Unicode_GB2312[0])-1;n>0;n>>=1,++j){  

if(Unicode_GB2312[i][0]==iUnicode) return Unicode_GB2312[i][1];  

if (j>1){  
if(Unicode_GB2312[i-1][0]==iUnicode) return Unicode_GB2312[i-1][1];  
if(Unicode_GB2312[i+1][0]==iUnicode) return Unicode_GB2312[i+1][1];  
}  

if (Unicode_GB2312[i][0]<iUnicode) i=i+n;  
else i=i-n;  
}  

if(Unicode_GB2312[i][0]==iUnicode) return Unicode_GB2312[i][1];  
if(Unicode_GB2312[i-1][0]==iUnicode) return Unicode_GB2312[i-1][1];  
if(Unicode_GB2312[i+1][0]==iUnicode) return Unicode_GB2312[i+1][1];  

return 0; //转换不成功  
}  


/*转换Unicde字符串到GB码,返回汉字数*/  
int strUnicode2GB(const char *strSourcer,const char *strDest,int n)  
{  
char cTmp;  
u_int16_t hz,tmphz;  

char *pSrc;  
char *pDest;  

int i;  


for (i=0,pSrc=strSourcer,pDest=strDest;n>0;n-=2,pSrc+=2,++i,++pDest){  

hz=0;  
hz=*pSrc<<8|(*(pSrc+1)&0x00FF);  
tmphz=Unicode2GBcode(hz);  

if (!tmphz||tmphz>0x7F&&tmphz<0xFF){  
*pDest='.';  
continue;  
}  
else if (tmphz>0x00&&tmphz<=0x7F){  
cTmp=tmphz;  
*pDest=cTmp;  
}  
else{  
cTmp=tmphz;  
*pDest=(tmphz>>=8);  
++pDest;  
*pDest=cTmp;  
}  
}  

*pDest='\0';  
return i;  

}  
[/code:1:0a0b72ed53] 
希望您对大家有帮助!至于GB->Unicode,我想就算了,反正网关可以支持的。 

 


CSDN VC编程经验总结

 

 
一个随机数函数和产生随机数的类:【上一篇】
gzip压缩算法:【下一篇】
【相关文章】
  • 关于unicode international 的看法!
  • 反查ASCII ASCII码对照表 ASCII码查询
  • 从ASCII到Unicode(UTF-8)
  • Windows环境下Unicode编程总结
  • C#中实现GBK码与Unicode码的转换及拼音简码的生成
  • 如何将unicode转换成中文
  • ASCII码
  • native2ascii 命令的手册页
  • 【我的代码】从用户输入的数字开始,打印ASCII码表格
  • Unicode网页中上传下载文件时发生文件名乱码的问题
  • 【随机文章】
  • PHP 常量类型
  • J2ME起步 编写你的第一个J2ME程序
  • 二叉树的性质
  • 客户全生命周期利润预测方法的研究(二)
  • 关于函数声明
  • Ipfilter心得集
  • 如何利用PHP会话显示出当前在线的用户
  • SWT Designer 安装与破解
  • NTFS文件系统是怎么工作的
  • 第一次用OleDB,结果被它玩死。。
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.