本帖最后由 life_fox 于 2017-9-29 00:57 编辑

汉字编码、单字节二进制查询源码

#include

#include

#include

#include

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;

}

更多推荐

c语言怎么查找中文字符,C语言自学,汉字编码范围查询!