分享到新浪微博 分享到QQ空间 打印

[其他] 基础知识的基础知识——About HEX

基础知识的基础知识——About HEX

这篇小文章构思了很久,今天就以俺特有的啰嗦语言给大家讲讲Hex、Dec、Offset以及pointer的知识。


一)什么是Hex、Dec
   Hex是“十六进制”的英文缩写,Dec则是“十进制”的英文缩写。你可能还不大清楚什么是进制,因为我们已经习惯了十进制,没注意为什么这么数数字。
   当我们数数的时候,我们会不自觉地用符号0、1、2、3、4、5、6、7、8、9表示数字。这就是十个数字。当我们数到9之后,下一个数字由于没有单独的符号表示,我们就把个位归为0,在前面写一个1,这样,就是10了。
   在十六进制中,我们用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F来表示数字。当我们数到十进制的9时,下一个数字有其独自的符号“A”,自然,后面就是BCDEF了。到F后,下一个数字就要进一位,角色上成了10进制中“10”,而其大小却是十进制的“16”。也就是说,满“16”进一位(遇到F进一位)。
   这里乱入一下,为什么用十六进制呢?我们知道,计算机使用二进制。在系统中,以8个二进制位(bit)为一个字节(byte)。你可以用windows计算器算算,二进制输入11111111(八个1),然后点十六进制,会看到我们熟悉的数字:FF,也就是255。(理解为什么很多PM游戏数据最大255了吧……)

二)Hex的写法

   如果我们写一个数字“11”,你会认为他是什么数字呢?为了避免歧义,我们通常在十进制前面什么都不写,在十六进制数字前面添加一个“0x”(数字0,字母x)。在一些脚本编辑器里面,如果一些参数不写“0x”,便会认为是十进制,写了就会认为十六进制(所以你也没必要多么担心那些命令参数到底用十进制还是十六进制)。还有一些其它方法。在VB中,数字前写“&H”,便是十六进制(这个可能一般不被脚本识别);在一些Hex编辑器(比如UE),地址的Hex形式(下面会讲)后会写个“h”。
   乱入了乱入了,VB里面数字前添加“&O”(英文字母O),表示八进制(Oct)。

三)什么是offset

   offset本意“偏移量”。偏移量怎么解释呢?在Hex编辑器中,打开一个rom,会看到一个个Hex数字,那一个数字是一个字节。偏移量我是这么理解的:它表示任意一个字节偏离第一个字节的数量(有点像数学中的绝对值)。比如,第一个字节offset为0,因为它偏离第一个字节为0……
   但是,为了理解方便,我们就用“地址”来表示这个意思。但有时候,offset也会表示“偏移量”本意,要不会理解错误。比如,俺曾经翻译的AM在连接管理器里面有个offset。我不理解意思,就翻译为“地址”。但是后来发现,它表示两张地图的错开的格数(两张地图不一定从边缘对齐么……),这里,“偏移量”最为合适。(对于给大家造成的不便,这里深表歉意。)
   再乱入一下。在VB编程里面,我们可以用Put语句来实现向Rom的一个指定字节位置写入数据。后面的一个参量与offset意义很相近,但是它是指那个字节的“编号”(第一个字节编号1,第二个编号2),所以,我们必须把offset加上1来用在这个语句里面。

四)offset的形式

   Ofset既然是表示一个数字,那么它也有两种形式:Dec和Hex。在UE中,我们在状态栏可能能看到选中的字节的地址(看不到可能得调出来)。一个是十六进制形式,数字后添加“h”,另一个什么也没添加……Rom脚本中一般都用Hex形式。
   
五)关于pointer

   这个也是我自己理解的。游戏中对于一些脚本,需要不断调用其它地方的数据。为了指明调用数据的位置,就要用pointer,大概就是“指针”的意思。比如,一个显示文本命令,其中就要用pointer指明文本的位置。pointer一般我们在脚本中不大用,脚本编辑器会自动将地址转为pointer。但是了解一下怎么转换也无所谓。
   offset转换为pointer很简单。将offset的十六进制补齐8位。(如果rom没有扩容,地址一般为00XXYYZZ形式,扩容的可能会出现WWXXYYZZ形式。这里不再讨论了)然后将其加上0x8000000,这样,一般就成了08XXYYZZ形式。然后每两个数字断开,倒置过来,就成了ZZYYXX08,这就是一个指针了。你会发现,正常rom中指针一般都以08结尾。所以……大家自己慢慢利用这一点吧。


就这点吧。有点啰嗦。不理解就跟我说一声,我尽量做得傻瓜平民化。

[ 本帖最后由 roywillow 于 2009-1-18 19:29 编辑 ]
本帖最近评分记录

TOP

嗯,这些基础知识确实该给新手补一补~


想死你们了!

TOP

虽然是不错……
新手我想没几个人会看- -
这些偶在UE和XSE中已经接触太多了XD= =
中考完毕,暑假开始。

TOP