好吧,既然007不相信我的分析,那我就用实例来说明吧。
' n; _/ L& L! |: S. L. B8 [以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:1 @4 F- T; x( p# O; ^
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
: A/ _ L% \- i0 P: u+ ^4 @7 c3 d9 j
% y4 Q/ J5 t* A+ w/ m1 v' U00000000 16 00 00 00 66 6F 6E 74 5F 67 61 6D 65 5F 6D 65 ....font_game_me
* U6 A0 E9 l: X* H! Q' }00000010 6E 75 5F 62 75 74 74 6F 6E 73 21 00 00 00 50 04 nu_buttons!...P.# l' _. v4 G2 d2 K0 _
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
! T1 a* e, [ h* X \00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ n' _* m% n8 G' o4 f2 m
) Z7 W: Z$ ^ |4 T第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。0 Z3 D+ W# \6 m4 P" A1 w9 p1 B8 o
_, `) l; R& T
再跳到数据部分:
' P' d& B9 Y, y
( N2 v- I- P0 d$ L7 Z1 E% \- LOffset 0 1 2 3 4 5 6 7 8 9 A B C D E F5 w8 n+ e& n+ G) Z2 H, a
$ N# q! v! e* x+ |/ `: |+ Q2 H
00000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................) g8 i1 a0 ~1 g8 [
00000330 00 00 00 00 00 00 00 00 00 00 6A 01 00 00 AE 00 ..........j...?1 Y& R! \6 ?2 a1 K( b/ Q5 ~
00000340 00 00 6F 01 00 00 CF 00 00 00 00 00 00 00 00 00 ..o...?........
1 I# S8 E$ j% ]1 X, `. |1 Y00000350 00 00 EF 01 00 00 AE 00 00 00 F5 01 00 00 CF 00 ..?..?..?..?
3 i% z, @7 W* a00000360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
; x8 H9 L# z. N j0 O5 k00000370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
6 K7 @& |9 L# Q* p9 h9 X' }! d2 Z0 E! H1 G9 n0 T% I
0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:
8 d+ _: O, \: U+ L+ `) k
9 B! k) v4 T: v5 `' S1 x 5 t* W% L% X/ [1 K+ ~. j1 O% q
从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。
, u; ?. o" `7 S8 n! w! `9 Y$ K) _& T
为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。
2 F% H! a; b S; P+ U4 y' Y
: F D, N3 K" ~+ T当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。( ]* Q$ e6 D0 H5 R# m
我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。 |