我一直在使用PHP中的Gettext文件哈希表。虽然我不确定这个可选表有多重要,但我想确保在生成MO文件时,如果可能的话,我将实现完整的规范。
我在Mac上和Linux上使用Gettext msgfmt编译了一个带有条目msgfmt的简单PO文件。哈希表有5个字节长,但奇怪的是包含了大部分空字节,如下所示:01 00 00 00 00
运行从Gettext源代码中提取的算法,我将生成表01 00 02 03 04。
这是我的测试代码
https://gist.github.com/timwhitlock/8255619 (包括示例PO文件)
我不写C,而是在Gettext源代码中摸索,以移植所显示的函数。
我自己的哈希表编译很可能是错误的,但是要理解为什么我想首先理解msgfmt生成的MO文件为什么有一个哈希表主要是零呢?
我很确定我正在正确地从MO文件中提取哈希表。我从第六个字节得到表的大小和位置,作为规范中概述了。
在我的“abc”示例中,不使用双重散列,因此我不明白该表如何正确,不管我的表是否正确。
这个'abc‘示例正确的哈希表是什么?
发布于 2014-01-04 17:39:46
我已经解决了这个问题。
我愚蠢地使用一个字节来保存哈希表中的每个整数。这是因为在C中看到了像hash_tab[idx]这样的东西,我的PHP将其转换为$hash_tab{$idx},这当然是错误的。会是substr($hash_tab,$idx,$idx+4)
我也没有看到哈希表的“大小”是字符串的数量,而不是字节长度。
我的示例代码现在起作用了。生成的表与从MO文件中提取的表匹配。
https://stackoverflow.com/questions/20922192
复制相似问题