您当前的位置: 主页网站优化软件知识

zz 一个Hash实例:Blizzard的MPQ文件

发布于:2014-03-17 18:37:41  作者:兄弟网络   点击:

星际、魔兽和WOW里面都有一个非常大的.MPQ文件,这个文件存储了游戏中大部分的资源数据,手机APP ,比如对话中的文字等等。Blizzard使用了hash table来组织对这个庞大文件的读写。

在WOW中,如果我跑到荆棘谷和地精卫兵聊天,那些绿色小矮人头上冒出来的叽叽咕咕的文字,网站建设,就是从那个奇大无比的资源文件里取出来的。嗯,小绿人有那么多台词,怎么从这么一个庞大的字符串数组里找出某个特定的呢?或者,给你一句话,怎么找出相同的那一句出来?

当然你可以从这个数组头开始,一个个字符串读过去,比较每一个,直到找到对应的。这样的方法当然也没问题,如果你的PC真的有那么快的话...

Blizzard的天才和牛人们当然不会这样做,他们用了更聪明的方法: 用某种算法,把一个字符串压缩成一个整数,比如把每个字符按ASCII码值相加,得到的这个整数,称为Hash。然后,按照这个整数值,直接得到此字符串在整个文件中的位置,从而直接读取之。

MPQ中使用这样的Hash算法:

unsigned long HashString(char *lpszFileName, unsigned long dwHashType)
{
unsigned char *key = (unsigned char *)lpszFileName;
unsigned long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
int ch;
while(*key != 0)
{
ch = toupper(*key++);
seed1 = cryptTable[(dwHashType

本文关键词: 一个| Hash| 实例| Blizzard| 文件|

[相关阅读]

我们介绍

  兄弟网络科技工作室,专业从事日照百度推广,日照百度优化,日照网站建设,日照网络公司,日照网站制作,日照网站优化,日照软件制作。如果您感觉我们不错请分享↓给更多的人

收缩