二进制如何转为汉字

像是11000100,11100011,10111010,11000011可以转成 你好
请问这是如何达到的?似乎是两个字节转成十进制按编码可以表示一个字,是这样么……按的是什么编码?

  1. 汉字信息交换码(国标码
  《信息交换用汉字 编码字符集·基本集》是我国于1980年制定的国家标准 GB2312-80,代号为国标码,是国家规定的用于汉字信息处理使用的代码依据。
   GB2312-80中规定了信息交换用的6763个汉字和682个非汉字图形符号(包括几种外文字母、数字和符号)的代码。
  6763个汉字又按其 使用频度、组词能力以及用途大小分成一级常用汉字3755个和二级常用汉字3008个。
  一级汉字按拼音字母顺序排列;若遇同音字,则 按起笔的笔形顺序排列;若起笔相同,则按第二笔的笔形顺序排列,依次类推。所谓笔形顺序,就是横、竖、撇、点和折的顺序。二级汉字按 部首顺序排列。
  在此标准中,每个汉字(图形符号)采用双字节表示。每个字节只用低7位,最高位恒为1。由于低7位中有34种状态是用 于控制字符,因此,只有94(128-34=94)种状态可用于汉字编码。这样,双字节的低7位只能表示94×94=8836种状态。

编码范围

二进制数码

十进制数码

基本 ASCII 码    
00000000~01111111    
0~127    

控制字符    
00000000~00100000、01111111    
0~32、127    

可用汉字段    
00100001~01111110    
33~126 (1~94)    

扩充 ASCII 码    
10000000~11111111    
128~255    

控制字符    
10000000~10100000、11111111    
128~160、255    

GB2312-80    
10100001~11111110    
161~254 (1~94)    

  此标准的汉字编码表有94行、94列,其行号称为区号,列号称为位号。双字节中,用 高字节表示区号,低字节表示位号。非汉字图形符号置于第1~11区,一级汉字3755个且于第16~55区,二级汉字3008个置于第56~87区。
  每个图形字符的汉字交换码,均用两个字节的低7位二进制码表示。汉字国标码通常用十六进制数表示。
  例如:“中”字的区号为 54,位号为48,计算它的二进制数和十六进制数国标码。
    解:先将区、位号分别加上 32 :
      54+32=86
       48+32=80
    分别转换为二进制数:
      (86)10=01010110
      (80)10=0 1010000
  得到二进制数国标码为:
      01010110 01010000。
  最后通过 8 4 2 1 ── 二进制取位法转换成十六 进制汉字国标码为:5650。
  又如“国”字的区号为25,位号为90,用以上相同的方法得到它的国标码为:
  二进制:00111001 01111010
  十六进制:397A

----------------------------------------------------------------

基于以上原则,则

  11000100,11100011,10111010,11000011

>(1100 0100 1110 0011)2,(1011 1010 1100 0011)2

>(C4E3)16,(BAC3)16

>查表可知:C4E3>>‘你’,BAC3>>‘好’


温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-08
二进制是将汉字编码,然后就可根据编码提取汉字了。
以下代码就可以实现二进制转为汉字:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>

int main()
{
char btos[3] = {'\0'};
char b[2][9] ;
char yon;
int item = 0;
int i;
int j = 0;
printf("开始执行程序(y/n) :\n");
yon = getch();
while('y' == yon||'Y' == yon){
do{
j = 0;
printf("请输入第一个二进制字符串 : ");
scanf("%s",b[0]);
for(i = 0;i < 8;i++){
if('0' != b[0] && '1' != b[0]){j = 1;
}
}
}while(8 != strlen(b[0]) || 1 == j);
do{
j = 0;
printf("请输入第二个二进制字符串 : ");
scanf("%s",b[1]);
for(i = 0;i < 8;i++){
if('0' != b[1] && '1' != b[1]){j = 1;
}
}
}while(8 != strlen(b[1]) || 1 == j);
for(i = 0;i < 2;i++){
for(j = 7;j >= 0;j--){
if('1' == b[j]){
item += pow(2,7-j);
}
}
btos = 32767&item;
item = 0;
}
printf("该汉字为:%s\n是否继续(y/n) :\n",btos);
yon = getch();
}
return 0;
}
第2个回答  2013-09-22
比如“大”这个字就是下面

00000000100000000
00000000100000000
00111111111111100
00000001010000000
00000010001000000
00000100000100000
00001000000010000
00010000000001000

每个字都是这样的,屏幕显示也一样