Unicode转GB2312编码C语言源程序

#include <stdio.h><stdio.h></stdio.h>
#include <string.h><string.h></string.h>
#include <ctype.h><ctype.h></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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值