本人通过对6618通讯录的格式做详细的“解剖”,彻底分析出了通讯录的内部格式。
本文可以供西门子的爱好者参考,当然对懂得软件编程的开发人员来说,我想应该是目前国内首次公开的宝贵的技术资料了,不知西门子会不会找我……,^_^
一、综述:
6618的通讯录是由三个文件组成的,放在动态内存的Address book目录下,这个目录是隐藏的,所以通过手机的文件管理器是看不到的,但通过数据线借助电脑,用DES软件可以清楚的看到这个隐藏目录以及这个目录里的三个文件,也是隐藏的。
这个三个文件为别为5f02.adr, 7f02.adr, 9f02.adr。
其中5f02是用来存放每一条通讯录的具体内容的,按条逐次存放。我称之为记录文件。
7f02.adr里存放的是每一条通讯录在5f02文件中的地址,便于检索。我称之为索引文件。
9f02.adr是由手机动态生成的,事实上备份通讯录只要拷贝前两个文件就可以了。
二、6618通讯薄记录文件格式(5f02.adr):
5f02由文件头和其后的通讯录记录构成:
(一)、文件头:
总共48字节。
头2字节:代表记录中包含字段的数目,一般为19个字段,即总为13 00;
依次2字节:代表通讯录中记录的个数;
剩余44字节总是:
00 00 01 00 01 00 13 01 93 01 13 01 93 02 13 01 13 01 93 00 4A 01 0A 02 4A 00 A9 00 A9 00 A9 00 A9 00 08 00 08 00 08 00 08 00 82 00
它们代表的意思是每条记录的各个字段具体的编码形式,是不变的。
(二)、记录:
0.记 录 头:38字节,表示各字段在记录中的字节长度,用2个字节表示,依次为:名、姓、公司、街道、城市、国家、备用(一般为12,包括VIP,名称前6字)、电子邮件、网址、邮政编码、私人电话、公司电话、移动电话、传真、四个电话存在标志、修改时间等19项,共占用38个字节;
1.名:在中国固定2字节,没有用这个字段总为00 00;
2.姓:长度按实际字数计,最长50字节,汉字内码,最长24个汉字,英文字符也按汉字存储,结束符为00 00,在中国代表姓名,无该项时长度为2即只含结束符;
3.公司名称:长度按实际字数计,最长34字节,汉字内码,最长16个汉字,英文字符也按汉字存储,结束符为00 00,无该项时长度为2即只含结束符;
4.街道:长度按实际字数计,最长82字节,汉字内码,最长40个汉字,英文字符也按汉字存储,结束符为00 00,无该项时长度为2即只含结束符;
5.城市:长度按实际字数计,最长34字节,汉字内码,最长16个汉字,英文字符也按汉字存储,结束符为00 00,无该项时长度为2即只含结束符;
6.国家:长度按实际字数计,最长34字节,汉字内码,最长16个汉字,英文字符也按汉字存储,结束符为00 00,无该项时长度为2即只含结束符;
7.备用:固定18字节,包含类型2字节,30为名片、31为VIP、32为普通,结束符为00;重复信息16字节,最多重复名字中的6个汉字,最后4个字节总为00;
8.电子邮件:长度按实际字数计,最长41字节,ASCII码,最长40个字符,结束符为00,无该项时长度为1即只含结束符;
9.网址:长度按实际字数计,最长65字节,ASCII码,最长64个字符,结束符为00,无该项时长度为1即只含结束符;
10.邮政编码:长度按实际字数计,最长9字节,ASCII码,最长8个字符,结束符为00,无该项时长度为1即只含结束符;
11.私人电话:长度按实际电话位数计,最长21字节,BCD码,最长40位数字,奇数位电话以十六进制数F结束,偶数为FF,无该项时长度为1即只含结束符FF;
12.公司电话:长度按实际电话位数计,最长21字节,BCD码,最长40位数字,奇数位电话以十六进制数F结束,偶数为FF,无该项时长度为1即只含结束符FF;
13.移动电话:长度按实际电话位数计,最长21字节,BCD码,最长40位数字,奇数位电话以十六进制数F结束,偶数为FF,无该项时长度为1即只含结束符FF;
14.传真:长度按实际电话位数计,最长21字节,BCD码,最长40位数字,奇数位电话以十六进制数F结束,偶数为FF,无该项时长度为1即只含结束符FF;
15.私电标志:固定1字节,FF为没有私人电话,81为有;
16.公电标志:固定1字节,FF为没有公司电话,81为有;
17.移电标志:固定1字节,FF为没有移动电话,81为有;
18.传真标志:固定1字节,FF为没有传真,81为有;
19.修改时间:固定16字节,ASCII码,年月日8字节+'T'+时分秒6字节,结束符为00;
总计最长为511字节。
三、6618通讯录索引文件格式(7f02.adr)
7f02有每条通讯录记录的索引构成,无其它内容。
索引:固定4字节,记录通讯录条目在5f02.adr中的偏移地址,每一个条目的格式为ww xx yy zz。
代表该条目在5f02记录文件中的偏移地址为zzyyxxww。最高位留作它用,即当最高位为1时表示该记录已经删除。
四、注意
当对手机的通讯录进行删除时,手机只是简单的把7f02中该条目的最高为置为1,然后把5f02对应地址空间全写为DD,头一字节写为EE,表示此空间无效。如果以后添加新的条目这一段空间也不会在被利用了,只会在5f02最后添加新条目。
当对手机的通讯录进行编辑时,如果存储新编辑的条目需要的空间大于原来的空间时,手机是先把原记录删除(同上),然后在5f02最后创建新的记录。
所以如果你对你的通讯录反复修改的话,5f02文件内部会出现许多不能被再利用的空间(内部碎片),文件就会变的越来越“胖”。
关于通讯录“减肥”的软件网上已经有了,但是我发现该软件有一些问题。所以我打算有时间的时候再编一个通讯录减肥的软件,到时可以与大家分享!^_^当然那位高手要是看了这片文章后想有编编的冲动,可以试试,那样我就省事儿了。
其实,3618/6686i/6688/6688i的通讯录格式和6618是一模一样的,它们都属于西门子45系列的机子,而55系列的机子(如M55/S57/SL55)的通讯录做了很大的扩展,格式与45系列有了很大的不同,关于55系列通讯录的格式还需要一定的时间研究,以后会在M55的宝典公布的。