一文帮你搞懂GBK码协议,让你真正理解和搞定它!
LCD_ShowString(0, 0, "瑞生");
然后,KEIL会在编译的时候,自动将你输入的汉字“瑞生”编译成GBK码...
“瑞”的GBK码是十六进制C8F0,“生”的GBK码是十六进制C9FA。
记住:每个中文字符的GBK码都是唯一的、两个字节,例如,“瑞”的GBK码的两个字节分别用十六进制表示为:0xC8和0xF0。(0x代表:后面的是十六进制数据),当你看到一个GBK码是0xC8F0,它也只能是“瑞”这个字。
记住上面那段话很重要,2个重点:
1.GBK码是2个字节
2.每个中文字符的GBK是唯一的
1、为什么中文字符GBK码是2个字节?
学过计算机的都听说过Ascii,每个英文字符都有自己的Ascii码,你可以百度一下,查询英文字符对应的Ascii码,一共有95个,我们知道,一个字节的数据范围是0~255,所以,用一个字节,就可以表示所有的英文字符了。
但是...,中文字符有很多,已经远远超过了一个字节的数据范围(255),而2个字节的数据范围是0~65535,已经足够表示所有的中文字符了。(GBK码有2万多个字符,65535是6万多)
这下你就想通了为什么是2个字节表示中文字符了吧?
2、为什么是唯一的?
答:规定的。你知道什么叫“协议”吗?你知道为什么会有“协议”吗?如果没有协议,人们就会乱来。所以,协议其实就是一种规定。
就拿GBK协议来说,协议说“瑞”的GBK码是0xC8F0,那“瑞”的GBK码就是0xC8F0。
GBK码,规定了所有汉字的码,并且宣布:大家以后用的话,都按照协议来就好!所以,现在GBK码基本上都在计算机上普及了。这就是前面提到的:KEIL会自动把汉字转换为对应的GBK码的原因。
3、我想知道某个汉字的GBK码,怎么查询?
这个不是必须要知道,刚才说过了,你写程序的时候,KEIL会自动把汉字变成GBK码,你都不用参与。
但是,可能有其它用途需要用到,比如,我写这篇文章,需要知道“瑞”的GBK码,就需要查询一下。
方法如下:
百度搜索:gbk码查询,如下图所示,点开第一个链接就可以查了。
点开以后,按照要求,输入“瑞生”两字,点击“查看编码”就可以了。
好了,我们继续!
GBK码的2个字节,第一个字节的范围是0X81~0XFE,第二个字节的范围是0X40~0XFE。你看看,他们不是从字节0开始的,从哪开始,都是规定的。
这样说的话,第一个GBK码就是0x8140,能看懂吗?
第二个GBK码就是0x8141...一直到0x81FE,再后来就是0x8240...依次列推...
看懂了上面三段话,你就可以理解了:GBK码其实就是一座公寓,公寓里面有126个房间,每个房间有191个字符。
GBK码的第一个字节代表着公寓的房间号,公寓的房间号是从0x81~0xFE,你可以算一下,一共有126个门牌号。0xFE-0X81+1=126。
GBK码的第二个字节代表着公寓里面的每个房间里有多少个字符,0xFE-0X40+1=191。
实际上,GBK协议规定,第二个字节的0x7F位置是空着的,没有字节,所以,每个房间是有190个字符,不过,并不是每个字符的位置都有字符,所以,我们这里说191个,也无所谓了。
除此之外,GBK的汉字顺序都是排好的,第一个是哪个字,第二个是哪个字...都是规定的!
下图是排好顺序的GBK字库txt文件的开始部分...
你可以看到,第一个字符是“丂”,从上面的GBK码协议,你也可以知道,第一个字符的GBK码应该是0x8140,也就是说,“丂”的GBK码就是0x8140,我们来验证一下...
怎么验证呢?用我上边给你提到的百度搜索出来的那个在线查询GBK码的网站就可以了。
这次,我们在下边的输入框输入,网页提示你,输入十六进制的话,前面加字符“&H”,所以我们输入的是“&H8140”,然后点击“查看文字”,就可以看到,这个字是“丂”了。
验证正确。
上面我讲的,你理解了吗?今天就先给大家介绍这些GBK码的定义吧,以后再给大家讲如何使用GBK码显示到液晶屏上。
重磅开源:带屏幕LCD脱机下载器离线下载器!
【开源方案】2.4G遥控器,接收器全套详细设计资料
【全开源功放】美国NS公司的经典芯片,LM3886!
分享一个来自苏泊尔的超低成本隔离交流电压检测+掉电检测二合一电路
软件神器TortoiseGit,晓宇姐姐教你使用图形化方式管理单片机程序版本!