好吧,既然007不相信我的分析,那我就用实例来说明吧。9 t8 W% P' Z* d. ?3 g( U
以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:# C1 d9 U5 \. O3 z
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
. I: _9 O, ?. Q; j# t2 }( W {9 m; u" x
00000000 16 00 00 00 66 6F 6E 74 5F 67 61 6D 65 5F 6D 65 ....font_game_me
3 S6 r# t8 q' a' b* u2 i6 z, ]00000010 6E 75 5F 62 75 74 74 6F 6E 73 21 00 00 00 50 04 nu_buttons!...P.0 D2 m* O% b) S3 y) U* H" ?. f
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................& i+ [# p f5 Y! [$ r; F4 ^
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................+ j: \. ?9 O, L$ x: O
1 _# M3 g! p' N第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。$ l: w* w% k/ q/ c) P; L) D
4 b2 U' O; z8 f4 ^再跳到数据部分:$ O: h# {9 v8 ~4 m7 p5 w/ J
1 f' ?: a& M- k! q0 W; DOffset 0 1 2 3 4 5 6 7 8 9 A B C D E F
1 |& s2 S/ B( x, ~# K: T& o, {) t" M0 Q: Q
00000320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
' q5 L9 y& d4 t+ V9 {00000330 00 00 00 00 00 00 00 00 00 00 6A 01 00 00 AE 00 ..........j...?; C0 q' a/ b }. w4 m
00000340 00 00 6F 01 00 00 CF 00 00 00 00 00 00 00 00 00 ..o...?........
( Z! l: v7 Y; x! j9 a; }" ^/ O00000350 00 00 EF 01 00 00 AE 00 00 00 F5 01 00 00 CF 00 ..?..?..?..?
( }4 y( C7 v* \00000360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
7 M0 `" ~) o$ c; [: H l- `00000370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
* L: G- J+ [. Z7 t7 F2 b- W5 N5 L$ a+ U# W0 n* Z
0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:
& b5 j9 c+ S: E+ f
6 s9 R% K8 O- P& j ! [ k- b' J$ v( \- O: F
从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。
% e* Z: F: i8 l- k
" |! j; w9 K/ U; h! {为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。
^+ \+ k* s; N/ y/ o4 {
! F7 h, T' p) {3 I3 t9 ~当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。( j0 z2 e, t* M& n% [! u
我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。 |