OpenCC
OpenCC copied to clipboard
ocd文件在32位,64位下可以通用吗
按我的理解应该是数据格式,32,64应该通用。是这样的吗。
經過我測試,似乎是不可以的
如果不通用,可以弄成通用的吗? 这个问题不是很重要,请酌情考虑。
因为在做wasm(32位)移植,ocd2的生成只能靠64位native build,就研究了一下。
我在Ubuntu x64和macOS x64上生成的ocd2文件经diff对比是完全一样的,它们和32位raspbian上生成的不一样,但大小一样
拿HKVariants.ocd2举例,经过cmp -l
对比,它们只有8个字节的差异,分为两个连续的4字节,而且64位下的都是0:
404 0 20
405 0 210
406 0 267
407 0 266
1060 0 120
1061 0 157
1062 0 137
1063 0 1
用gdb运行opencc_dict -i HKVariants.txt -o HKVariants.ocd2 -f text -t ocd2
定位了一下,不一致出自
https://github.com/BYVoid/OpenCC/blob/200d01f065805b5f2f20baace4ade59a8a132daf/deps/marisa-0.2.6/lib/marisa/grimoire/trie/louds-trie.cc#L592
底层是
https://github.com/BYVoid/OpenCC/blob/200d01f065805b5f2f20baace4ade59a8a132daf/deps/marisa-0.2.6/lib/marisa/grimoire/vector/flat-vector.h#L172
不一致的原因是32位和64位下MARISA_WORD_SIZE
不一样。
我不懂marisa的实现,但我猜测既然64位上都是0那32位的数据应该没什么信息量,然后我替换掉HKVariants.ocd2用opencc -c s2hk.json
似乎也是能转换的。
@ayaka14732 请问你的测试方式怎么复现?
@ayaka14732 请问你的测试方式怎么复现?
我已經不記得了,如果可以的話,就是我記錯了