正文

Unicode转GB2312编码C语言源程序(原创)2006-02-28 15:14:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yang/10620.html

分享到:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int H2D(char c){
 switch (toupper(c))
 {
  case 'A': return 10;
  case 'B': return 11;
  case 'C': return 12;
  case 'D': return 13;
  case 'E': return 14;
  case 'F': return 15;
 }
 return (c-'0');
}

unsigned short tbl[65535];
void u2gb(unsigned char *u,unsigned char *gb){
 int i,j=0;
 unsigned char l,h;
 for(i=0;i<=strlen(u);){
  l=u[i++];
  h=u[i++];
  if(l==0 && h==0) break;
  if(l<0xA4 && h<=0){
   gb[j++]=l;
   continue;
  }
  gb[j++]=tbl[h*0x100+l]/0x100;
  gb[j++]=tbl[h*0x100+l]%0x100;
 }
 gb[j++]=0;
}

int init_u2gb(){
 FILE *fd;
 int size;
 char buffer[10];
 memset(tbl,'\0',sizeof(tbl));
 fd = fopen("code1.txt","r");
 if(fd==NULL) return -1;
 while(!feof(fd)){
  fread(buffer,sizeof(buffer),1,fd);
  tbl[H2D(buffer[0])*0x1000+H2D(buffer[1])*0x100+H2D(buffer[2])*0x10+H2D(buffer[3])] =
   H2D(buffer[5])*0x1000+H2D(buffer[6])*0x100+H2D(buffer[7])*0x10+H2D(buffer[8]);
 }
 close(fd);
 return 0;
}
int main(int argc, char *argv[])
{
 unsigned char u[150],gb[150];
 memset(u,'\0',sizeof(u));
 memset(gb,'\0',sizeof(gb));
 init_u2gb();
 strcpy(u,"0");
 strcat(u,"\0\0");
 u2gb(u,gb);
 printf("%s\n",gb);
 scanf("%s",u);
}

阅读(8992) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册