【问题标题】:What is the meaning of `16 longs` and `110 words`, when reads the bits from a file当从文件中读取位时,“16 longs”和“110 words”是什么意思
【发布时间】:2013-12-02 23:42:15
【问题描述】:

我正在尝试读取属于warcraft 2 游戏地图的PUD 文件格式。

在文件结构的解释中,有一些小短语我没看懂。

这是什么意思16 longs110 words

这是一个例子

16 longs -------> 允许单位和建筑物。 (16 名玩家)

units bit order:
        0000000000000000000000000000000x        bit0:  footman/grunt
        000000000000000000000000000000x0        bit1:  peasant/peon
        00000000000000000000000000000x00        bit2:  ballista/catapult
        0000000000000000000000000000x000        bit3:  knight/ogre
        000000000000000000000000000x0000        bit4:  archer/axe thrower
        00000000000000000000000000x00000        bit5:  mage/death knights
        0000000000000000000000000x000000        bit6:  tanker
        000000000000000000000000x0000000        bit7:  destroyer
        00000000000000000000000x00000000        bit8:  transport
        0000000000000000000000x000000000        bit9:  battleship/juggernault
        000000000000000000000x0000000000        bit10: submarine/turtle
        00000000000000000000x00000000000        bit11: flying machine/balloon
        0000000000000000000x000000000000        bit12: gryphon/dragon
        000000000000000000x0000000000000        bit13: unused/unused
        00000000000000000x00000000000000        bit14: demo. squad/sapper
        0000000000000000x000000000000000        bit15: aviary/roost
        000000000000000x0000000000000000        bit16: farm
        00000000000000x00000000000000000        bit17: barracks
        0000000000000x000000000000000000        bit18: lumber mill
        000000000000x0000000000000000000        bit19: stables/mound
        00000000000x00000000000000000000        bit20: mage tower/temple
        0000000000x000000000000000000000        bit21: foundry
        000000000x0000000000000000000000        bit22: refinery
        00000000x00000000000000000000000        bit23: inventor/alchemist
        0000000x000000000000000000000000        bit24: church/altar storms
        000000x0000000000000000000000000        bit25: tower
        00000x00000000000000000000000000        bit26: town hall/great hall
        0000x000000000000000000000000000        bit27: keep/stronghold
        000x0000000000000000000000000000        bit28: castle/fortress
        00x00000000000000000000000000000        bit29: blacksmith
        0x000000000000000000000000000000        bit30: shipyard
        x0000000000000000000000000000000        bit31: unused

这是否意味着16 longs = 16*4Bytes = 6416*32Bits = 512 或其他。
110 words 也一样。

【问题讨论】:

  • 读取 n 字节或 n*8 位有什么关系?但是,您会发现,您无法读取单个位,除非这些数据来自串行接口并且您的软件支持它。

标签: c binaryfiles bits


【解决方案1】:

他们指的是特定架构上的 C 类型。在 C 中,long 是一种变量。它的大小随编译器的变化而变化,但在这种情况下,它是一个 32 位的值。字是处理器字,在现代用语中通常是 32 位。然而,魔兽争霸 2 是很久以前编写的,并且运行在 16 位机器上。正如 Sean 在评论中指出的那样,在这种情况下,单词是 16 位的。

回答评论中的问题:

16 个长整数 = 16 * 32 位 = 512 位 = 64 字节。

110 字 = 110 * 16 位 = 1760 位 = 220 字节。

【讨论】:

  • 一些谷歌搜索让我明白了这一点:cade.datamax.bg/war2x/pudspec.html 所以如果它是正确的,那么 long 是指 4 个字节,一个单词是 2 个字节。
  • 感谢您的回答,评论中的文章链接是我关注的,但我想直接回答请16 longs = ?,和110 Words = ?,我知道这个词= 16 位和长 = 32 位。
【解决方案2】:

我从来不知道“16 longs, 110 words”除了 long 是 64 位数字和 word 是 32 位数据之外还有任何特殊含义。我会做一些实验,看看前 16 个 8 字节块中包含哪些值,然后是 110 个 4 字节块,看看值是否相对一致。

如果通过查看单词值,您在上面的表格中看到了一点,那么大概您正在正确阅读它。但是,一般来说,没有办法确定你是否适合这些事情,只有方法知道你是否错了。

编辑:当然,大小多年来一直在变化,“long”可能是 4 个字节,而不是 8 个。同样,单词是 2 个字节,而不是 4 个。

【讨论】:

  • 如果“long”与“word”不同,那么我希望他们使用的是 16 位时代采用的命名约定。 8 位 = 1 个字节,16 位 = 1 个字,32 位 = 1 个长字(或双字),64 位是 1 个四字。
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多