【发布时间】:2020-01-15 19:18:51
【问题描述】:
这是 Windows .lnk 快捷方式格式的文档:
ShellLinkHeader 结构是这样描述的:
这是一个文件:
查看HeaderSize,字节为4c 00 00 00,应该表示十进制76。这是一个小端整数,这并不奇怪。
接下来是 LinkCLSID,其字节为 01 14 02 00 00 00 00 00 c0 00 00 00,表示值“00021401-0000-0000-C000-000000000046”。 This answer 似乎解释了为什么字节顺序会发生变化,因为最后 8 个字节是字节数组,而其他字节是 little-endian 数字。
我的问题是关于 LinkFlags 部分。
LinkFlags 部分是这样描述的:
我文件中的字节是9b 00 08 00,或者二进制:
9 b 0 0 0 8 0 0
1001 1011 0000 0000 0000 1000 0000 0000
^
通过比较不同的文件,我发现标记为^的位在文档中是位6/G(标记为红色)。
如何解释这个?字节的顺序与文档中的顺序相同,但每个字节的位都颠倒了?
【问题讨论】:
-
你画错了
9b 00 08 00。值为0008009b,即0000 0000 0000 1000 0000 0000 1001 1011。 -
@RaymondChen 我按照从磁盘读取的顺序绘制了这些位,不是吗?您建议我将它们解释为小端整数。 (不像 LinkCLSID。)这正是我的问题:我应该吗?为什么?如果我这样做了,为什么它仍然与文档中的位顺序不匹配?
-
位标志不能那样工作。它们处理最终的 interpreted 值,这意味着您需要在查看位之前应用字节顺序并获取完整的 int 值。你的标志值是
0008009b。 -
顺便说一句,这些相同规格的网页版本在线。 LinkFlags 页面是here。
标签: windows endianness