bin是什么文件格式怎么打开(bin是什么文件格式可以删吗)

以unicode编码存储和搜索的简化Unicode也称为简单Unicode。目的:将key表空优化到极致。选项:简单Unicode+固定高度一、分段图主要有四个

以unicode编码存储和搜索的简化Unicode也称为简单Unicode。目的:将key表空优化到极致。

选项:简单Unicode+固定高度

bin是什么文件格式(bin类型是什么)

一、分段图

主要有四个部分:文件头、编码表、密钥表和点阵信息。

注:字符数决定了编码表和密钥表的大小。

适用场景:编码不连续,字符数少。

文件头结构

/* for高度固定存储格式*/typedef struct GUI _ font _ head _ height _ fixed { byte magic[4];//'S & # 39('U & # 39或者‘M’),& # 39;F & # 39, 'L & # 39,x-Unicode (ORMBCS)字体库,x:表示版本号。分为高低4位数。0x12表示Ver 1.2双字大小;//文件大小字节nSection//有几条数据,主要对UNICODE编码有效。BYTE YSize//字体高度字wCpFlag// CodePageflag: bit0~bit13每一位代表一个代码页标志。如果为1,则表示选择了当前代码页;否则,它将被取消选中。WORD nTotalChars//字节扫描模式的总字符数;//扫描模式字节bpp//位深度} GUI _ font _ head _ HF,* pgui _ font _ head _ HF要点:字体高度,字符数,扫描方式,位深。

二。图例的详细说明

1.文件标题

注意:上图中蓝色标记的部分(16字节)是文件头。详细解释如下:

546 4c 12-识别标题以确定它是否是合法的字体文件。

53 = 'S' s ',这意味着文件是简单Unicode编码格式。

46 = 'F ',4C = & # 39L & # 39

12表示字体文件的版本信息是V1.2

0 26 b03 00-文件总长度。也就是说,文件长度= 0x00036B20

00-表示有几个段。00表示0段。

0C-表示字体高度。0C = 12,表示12个像素。

000-表示当前字体中包含哪些字符集。

38 1D-表示有效字符的数量。0x1D38 = 7480个字符。

00-表示扫描模式(对比刀具设置选项就清楚了)。

01-表示位深度(参考值:1,2,4,8),bpp = 1。

2.编码表

注:蓝色标记部分为编码表数据。它们以小端顺序、升序存储,2个字节为一个代码。如果A400A70A800...,表示第一个代码是0x00A4,第二个代码是0x00A7,第三个代码是0x00A8,依此类推。

3.密钥表

一条检索信息占用4个字节,包括字符宽度和点阵信息的初始偏移地址。检索信息结构如下:

typedef struct tagUflCharInfo { DWORD of addr:26;//当前字符点阵数据的起始地址DWORD Width:6;//字符点阵的像素宽度(目前支持的最大点阵< 64)} UFL _字符_索引;注:高6位记录字符宽度,低26位记录点阵信息的初始偏移地址。

4.点阵信息

所有包含当前字体字符的点阵数据集,数据存储方式与扫描方式有关,分为横向和纵向,视情况而定。比如B3 1A,也就是10110011 00011010,匹配的位深可以一一处理。

三。参考码

1、简单unicode.h

// unicode_simple.h //#if!defined(_ _ FONT _ UNICODE _ SIMPLE _ H _ _)# define _ _ FONT _ UNICODE _ SIMPLE _ H _ _ # include & # 34;..\ include \ typedef.h & # 34/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * func:读取代码列表,Param: nCodeNum:代码个数dwHeadLen:文件头长度返回:“0”成功返回,否则返回“非0”。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */int font _ unicode _ simple _ read _ codes(int ncode num,dword dw//释放与代码列表void font _ unicode _ simple _ release _ codes()相关的内存;/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * func:定位字符,成功返回检索到的信息;否则,返回0。Param: nCode: code dwHeadLen:文件头长度返回:否则返回0。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */dword font _ unicode _ simple _ find _ char(word wcode,dword dw headlen);# endif//(_ _ FONT _ UNICODE _ SIMPLE _ H _ _)

2、简单的unicode.c

/***********************************************************描述:用c语言写的一个如何从unicode编码格式的点阵字库中读取字符信息(像素宽 +点阵信息) 至于容错性和效率方面还得使用者自行改善。谢谢您的参阅!作者:wujianguo日期:20090516MSN: wujianguo19@hotmail.comqq:9599598*************************************************************/#include "..\include\font.h"#include "..\include\font_file.h"#include "..\include\unicode_simple.h" #ifdef WIN32#include <stdio.h>#include <stdlib.h>#endif#define MAX_FIND_LIMIT 31 // 是否二分查找临界值static int g_nCodeNum = 0;WORD *g_pCodes = NULL; // 读取编码列表int font_unicode_simple_read_codes(int nCodeNum, DWORD dwHeadLen){ font_unicode_simple_release_codes(); g_nCodeNum = nCodeNum; g_pCodes = (WORD *)malloc(nCodeNum*sizeof(WORD)); if(g_pCodes == NULL) { printf("Malloc is fail!\n"); return -1; } font_file_seek(dwHeadLen); font_file_read(g_pCodes, nCodeNum*sizeof(WORD)); return 0;}// 释放动态分配的内存void font_unicode_simple_release_codes(){ if(g_pCodes != NULL) { free(g_pCodes); g_pCodes = NULL; }}// 定位编码位置,若找到返回 >= 0的值,否则返回 -1.int font_unicode_simple_find_code(WORD wCode){ if(g_nCodeNum > 0) { if(g_nCodeNum > MAX_FIND_LIMIT) // 二分查找 { int low, high, mid; low = 0; high = g_nCodeNum -1; while(low <= high) { mid = (high + low)/2; if(g_pCodes[mid] == wCode) return mid; else if(wCode > g_pCodes[mid]) low = mid + 1; else high = mid - 1; } } else // 顺序查找 { int i = 0; for(i = 0; i < g_nCodeNum; i++) { if(wCode == g_pCodes[i]) return i; } } } return -1;}// 根据编码获取检索信息DWORD font_unicode_simple_find_char(WORD wCode, DWORD dwHeadLen){ DWORD offset = 0; DWORD dwCharInfo = 0; int nIdx = font_unicode_simple_find_code(wCode); if(nIdx == -1) // 未找到该编码 return 0; offset = dwHeadLen + g_nCodeNum * 2 + nIdx * 4; //dwHeadLen:文件头长度;g_nCodeNum * 2: 编码表长度;nIdx*4:检索表偏移 printf("offset = 0x%X\n", offset); font_file_seek(offset); font_file_read(&dwCharInfo, sizeof(DWORD)); return dwCharInfo;}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/336848.html

发表回复

登录后才能评论