擅长:python、mysql、java
<p>您应该使用标准库<a href="http://docs.python.org/2/library/struct.html" rel="nofollow">http://docs.python.org/2/library/struct.html</a>中的<code>struct</code>模块,因为您正在解析二进制文件格式。<code>ctypes</code>模块用于将共享库(dll)与二进制API集成到Python应用程序中。我并不是说您要做的是不可能的,但是使用<code>ctypes</code>比简单地从二进制文件解析C结构要复杂得多。在</p>
<p>请记住,在C中没有PWIN32_FIND_DATAW指针。这只是一个typedef,它将解析为原始C数据类型之一,如32位指针、64位指针等。文件中的数据表示原始的基本C数据类型。在</p>
<p>作为对评论的回应。。。避免寻找捷径。您确实需要深入了解写入文件的位以及它们是如何组织的。为此,您可能需要执行一些hexdump并检查实际的数据表示。根据MS<a href="http://msdn.microsoft.com/en-ca/library/windows/desktop/aa365740(v=vs.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-ca/library/windows/desktop/aa365740(v=vs.85).aspx</a>,这不是一个真正的复杂结构。如果wintypes中的结构不适合您,则可能是您发现了一个bug。磁盘上的结构也可能与内存中的结构不同。通常,ram中的数据结构包括填充以保持16或64字节边界上的对齐。但众所周知,程序员不会将结构按原样转储,而是将其分离并输出到一个减去填充的文件中。因为ctypes/wintypes是用来对DLL进行二进制api调用的,所以它的偏向是在数据布局中包含填充。但文件可能不包括这个。在</p>