好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 life_fox 于 2017-9-29 00:57 编辑
汉字编码、单字节二进制查询源码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
system("title 汉字编码、单字节二进制查询");
unsigned char ch[3]={0};
unsigned ch_2[6768][3]={0};
int ch_int[6768][2]={0};
int x,y;
int a=0;
//基本常见汉字范围:0xB0A1(45217) - 0xF7FE(63486)
/*
45217是高8位和低8位二进制整合后转换的十进制
45217的二进制: 1011 0000 1010 0001
高八位:1011 0000 十进制: 176
低八位:1010 0001 十进制: 161
63486的二进制: 1111 0111 1111 1110
高八位:1111 0111 十进制: 247
低八位:1111 1110 十进制: 254
基本常用全角符号编码范围:0xA1A1(41377) - 0xFEFE(65278)
这个范围是包含了汉字、中文标点符号、日文、俄文、部首、序号、注音、拼音等等
就是手机输入法中,单击符号,所列出来的那些
还有一个范围是0x8180(33152)-0xFEFE(65278) 这个范围是包含了繁体字和一些非常见汉字 ( 高8位248之后,低8位基本不超过160 )
*/
for(x=176;x<=247;x++)//高8位编码最低是176最高247
{
for(y=161;y<=254;y++)//低8位编码最低是161最高254,字节集[176,161]---[247,254]这是汉字编码范围
{
a++;
ch[0]=x; //高8位编码
ch[1]=y; //低8位编码
strcpy(ch_2[a-1],ch); //将2字节组赋值给集合用于保存
ch_int[a-1][0]=x; //将 高8位编码 保存
ch_int[a-1][1]=y; //将 低8位编码 保存
}
}
loop:system("cls");
printf("请输入需要查询的汉字:");
/*
scanf("%s",&ch);
本人的是不完整XP系统,无法输入中文,故无法测试
*/
strcpy(ch,"陈");
char ch_g8[8],ch_d8[8],ch_jihe[8]={0};
for(x=0;x<6674;x++)
{
if((strcmp(ch,ch_2[x]))==0)
{
printf("查询的汉字 :%s\n",ch_2[x]);
printf("高八位编码 :%-11d低八位编码:%d\n",ch_int[x][0],ch_int[x][1]);
itoa(ch_int[x][0],ch_g8,2);
printf("高八位二进制:%s ",ch_g8);//将高8位转换为二进制
itoa(ch_int[x][1],ch_d8,2);
printf("低八位二进制:%s\n",ch_d8);//将低8位转换为二进制
//将2个字节的二进制整合
char chuan[16]={0};
strcat(chuan,itoa(ch_int[x][0],ch_g8,2));
strcat(chuan,itoa(ch_int[x][1],ch_d8,2));
//整合后的二进制转换成十进制
int i=0,b[16];
for(y=0;y<16;y++)//将0、1字符转换成0、1整型
{
if(chuan[y]=='1')b[y]=1;
else if(chuan[y]=='0')b[y]=0;
}
for(y=0;y<16;y++)//将转换后的整型二进制转换成十进制
{
i=i+(b[15-y]*pow(2,y));
}
printf("字节集 编 码:%d\n",i);
printf("字节集二进制:%s\n",chuan);
}
}
printf("是否继续?Y/N:");
char c;
scanf("%s",&c);
if(c=='y' || c=='Y')goto loop;
else return 0;
}
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|