ASCLL用一个字节表示,最高位是奇偶校验位或空闲,检验传输中是否出现错误,奇校验:一个字节的1的总数是奇数个,若非奇数最高位b7补1,偶数校验同理
ASFII7X5,8X6,16X8,行X列
7X5:字节0-6,D7-D3
GB是汉字国标码,分为94个区,每个区94个汉字,汉字的位置由两个字节分别表示区号和位号,为了区分ASCLL码,每个字节的首位置1
HZK24:每个汉字是2424像素,每个像素占1个bit,则每个汉字占2424/8=72byte;
点阵汉字字库
也有比较特殊的字体,它不是8的倍数----
比如 12*12 的点阵,意思是说每1行有12个点,一共有12行。由于1个点使用1个比特位来表示,如果这个比特位的值为1,则表示这个位置有点,如果这个比特位的值为0,则表示这个位置没有点。从而1行就需要12个比特位,而8个比特就是1个字节,也就是说,这个点阵字体中,一行的数据需要1个半字节来存放。但是数据的读取一般都是以字节为单位,这样也是为了方便读字库。因此这里的格式是:第1行的前8个点的数据存放在点阵数据的第1个字节里面,第1行的后面4个点的数据存放在点阵数据的第2个字节的高4位里面,而第2个字节的低4位全部补0。第2行的前8个点的数据存放在点阵数据的第3个字节里面,第2行的后面4个点的数据存放在点阵数据的第4个字节的高4位里面,而第4个字节的低4位全部补0。然后后面的就以此类推了。这样我们可以计算 12*12的点阵出存放一个点阵总共需要32个字节。
这样我们可以得出一个 m*n 的点阵所占用的字节数为 (m+7)/8*n。
8X16的ASC码,每个字符占用16个字节的内存空间,让它显示即是16行,每行1个字节的数据,1亮0不亮,显示步骤如下:
1.打开字库文件;
2.计算要打印字符的字库偏移量;
3.寻址将该字符取出到缓存区;
4.显示这个缓冲区,为1者打印,为0者留空。
字库里的字符排序是符合ASCII码顺序的,将要打印的字符与16相乘,便得到这个字符在字库中的位置了,这个位置之后的16个字节的数据,就是这个字符了。比如大写字母“A”,十六进制是0x41,它与0x10(十进制的16)相乘,得到0x410使用十六进制编辑器(用UE相信会更方便些)查看这个偏移量,会发现有如下数据:
$ hexdump -C …/HZK/ASC16 | grep 410
00000410 00 00 10 38 6c c6 c6 fe c6 c6 c6 c6 00 00 00 00 |…8l…|
“A”的16个字节数据显示效果,一个字节一行,共占16行,如下:
00000000
00000000
00010000
00111000
01101100
11000110
11000110
11111110
11000110
11000110
11000110
11000110
00000000
00000000
00000000
00000000
引用:
http://www.doc88.com/p-4972252529677.html
http://www.voidcn.com/article/p-wzrmjoyq-za.html
https://my.oschina.net/u/4000302/blog/4705238