字母压缩的方法 本发明涉及一种字母压缩的方法,尤其涉及一种应用于电话机中储存电话识别码(CallerID)的字母压缩的方法
由于市场的需求,一种具电话识别码的电话机已渐渐普及。电话识别码通常包括来电者的姓名(或代码)、来电时间及日期等信息,在电话拨进时,用户能事先得知来电为谁,以决定接或不接该电话。这样的做法,可以使用户更安心的接听电话,当然,在防止不法事情的发生上,更具有其正面的效果。
由于一个人的姓名通常在16个字母之内,又因为ASCII码系使用8位?的编码,用以编出代表256不同符号的码,其中英文大写字母是从十六进位的21H到3AH,所以存放电话识别码姓名部份的存储空间是设计成16个字节(Bytes),但是这样的作法显然有待改善。
请参见图1,在具电话识别码的电话机中,现有技术的电话识别码的数据结构通常分为三部份。第一部份11为2个字节,用来存放时间,例如十点30分,则存放在第一部份的数据为″1030″。第二部份12亦为2个字节,用以存放日期,例如十一月二十号,则为″1120″。第三部份13大小为16字节,用以存放来电者的姓名代码,例如″AB…N″,则存在第三部份13为十六进位的21,22,…,2E;其中第一部份及第二部份系以BCD码(二-十进制)表示,而第三部份13以ASCII码表示。
事实上,第三部份13的姓名代码,因为由大写英文字母组成即可,而英文字母共有二十六个,所以用五位即可编码完成,并不需要用到八位。但是存储器的编址通常是以字节为单位,若为了节省存储空间,以每五位为单位,将经五位编码地数据″一个接着一个″存在以八位(等於一字节)为编址单位的存储器中,在读写数据及处理上却变得复杂许多。
本发明的目的在于提供一种字母压缩的方法,它能将二十六个英文字母以等效五位编码的方式有效减小存储空间,使较小的存储空间可储存较多的电话识别码。
本发明的目的是这样实现的:
一种字母压缩的方法,用以储存一字母,该字母系包含在一符号集合中,其特点是包括以下步骤:
在该字母的字序超过该符号集合的中间值时,设定一特定位(Bit),并将一存储单元的值设定为字母超过该符号集合的中间值的字序;以及
在该字母的字序未超过该符号集合的中间值时,重置该特定位,并将该存储单元的值设定为该字母的字序;
其中该存储单元的值的大小系由该符号集合一半的字母数决定之。
在上述的字母压缩的方法中,其中,所述的其中该符号集合是包含{A,B…Y,Z}空隔及二十六个字母,该符号集合的中间值是为{M},该字母的字序未超过该符号集合的中间值的部份是为{A,B…M},该字母的字序超过该符号集合的中间值的部份是为{N,O,...,Z}。
在上述的字母压缩的方法中,其中,所述的该字母的字序是由{A}的0,{B}的1,…,到{Z}的25;将该字母的字序除以13的商是决定该特定位的值,而其余数决定该存储单元的值。
在上述的字母压缩的方法中,其中,所述的存储单元的大小是为四个位。
在上述的字母压缩的方法中,其中,所述的重置该特定位是指写入“0”,设定该特定位是指写入“1”。
在上述的字母压缩的方法中,其中,所述的16个该特定位及16个该存储单元是组成一10字节大小的存储空间,而该10字节大小的存储空间最多容纳16个字母。
本发明由于将英文符号集合分割一半,若所储存的英文字母为前半部的字母,则设定一特定位为″0″,反之则″1″;其次依所储存的英文字母在分割一半後的二个子集合中的字序决定一存储单元(4个位即可)的值,因此,储存一个字母仅需5个位,所以可以使储存电话识别码的空间大为减小。
通过以下对本发明字母压缩的方法的一实施例结合其附图的描述,可以更进一步理解本发明的目的、特点和优点。其中,附图为:
图1是现有技术的电话识别码数据结构。
图2是以及本发明提出的字母压缩的方法中电话识别码数据结构。
请参见图2。如前所述,电话识别码30姓名中的英文字母事实上以五位(bit)来编码即可,但若纯粹照字母排列的顺序来编码,在处理的时候反而会更显复杂,所以在此提出一种可以五位编码,处理时又不会复杂的编码方法,如所列的头码/尾(Header/Tailer)对照表。将英文字母的前半部赋与“0”的头码,而後半部的英文字母头码则为“1”。其次在将A到M的尾码分别编为十六进位的“0”到“C”,同理“N”到“Z”的尾码亦为“0”到“C”。
为了配合上述的编码方法,提出一种数据结构20,以存取电话识别码姓名部份的英文字母。第一部份及第二部份的时间及日期因为本身即为BCD码(二-十进制),无需多加处理,所以并无改变。不同的地方在於规划16个特定位的头码部份31用以分别存储十六个字母的头码(Header);同时以十六个存储单元,每个存储单元4位Bits,最多可表示十六种码,来表示被分成一半的十三个英文字母(A~M或N~Z)。
亦即,当中央处理器(CPU)在把电话识别码姓名的某一英文字母写入存储器时,必须先判断该英文字母是属於前十三个字母或者为後十三个字母。若为前十三个字母,则将“0”写入一特定位内,再将该字母的字序(0到12)写入一存储单元;反之,若属於後十三个字母,则将“1”写入该特定位内,再将该字母超过“M”的字序(0到12)写入该存储单元。该存储单元为四位,加上该特定位,共五位。以五位来存储字母,所以可以使存储空间大为减小。
在写入数据时,可以先将输入字母的ASCII码减去“A″的ASCII码(十六进位为21,十进位为33),即可得到该字母的字序,例如输入“A”时,“A″本身的ASCII码相减,字序即为0,又例如“Z”的ASCII码(十进位为58),减去“A”的ASCII码(十进位为33),即可得字序25。再将该字序除以13,所得的商数即为头码(Header),余馀数即为尾码(Tailer),例如“A”的字序为0,除以13,可得头码为0,尾码亦为0,而“Z”的字序为25,除以13,可得头码1,尾码12(十六进制为C)。当然,若不以除法来实作,也可以用减法来作,原理则相同。
而在读出数据时,可以依序将头码部份31及尾码部份32的数据一个个读出。每读出一个头码及一个尾码时,将头码乘以13,加上尾码,再加上“A”的ASCII码即还原为原来字母的ASCII码。
在图2中,为了清楚说明,举一个姓名为“JOHNSONYKK”的例子。从头码/尾码对照表可得,其头码为“01011111100”尾码则为“9170510BAA”(以十六进制表示)。由于本实施例是以存储十六个字母为例,未足十六字母的部份则头码/尾码分别补十六进位“0”及“F”,所以真正存储在存储器的数据为,头码部份31“6F00”,尾码部份32“9170510BAAFFFFFF”。为什麽尾码不和头码一样补“0”呢?因为若尾码也是“0”,则当中央处理器读回该数据时,会误判为英文字母“A”,为了防止误判,所以尾码补十六进制“F”,而不补“0”。
事实上,本发明也可应用在存储8个字母、24个字母、32个字母等,若存储8个字母,则仅需5个字节(Bytes)、存储24个字母则仅需15个字节、32个字母则为20个字节…。可见得比一般的储存,每个字节存一个字母,可压缩为八分之五倍的存储空间。
在应用上,本发明是以常用的字母{′A′,′B′,…′Z′}为一符号集合,取其一半来编码,当然可视需要,改变为其他的符号,或加上一些常用的符号(以本实施例而言,事实上当可以编进去六个符号)。
上述数学运算是可利用中央处理器的逻辑运算单元(ALU)来达成,而中央处理器的技术是为一现有技术,故本发明不多描述。由上述的图解及说明,我们可知,利用编码及数据结构的特殊设计,可以使电话识别码(CallerID)储存姓名字母部份的存储空间减小为八分之五倍,换言之,同样的存储空间可记录更多的电话识别码。