<p>正如评论中已经提到的,这是由于windows和linux之间的差异造成的。<code>ctypes</code>模块试图适应本地环境,因此不匹配。最好的解决方案是使用<code>struct</code>模块以独立于平台的方式处理它。下面的代码演示如何对单个记录执行此操作。在</p>
<pre><code># Setup test data based on incomplete sample
bytes = "\x16\x00\x00\x00\xdc\x5a\x9f\xd2\x31\x04\xca\x01\xba\x81\x89\x1a\x81\xe2\xcd\x01\xba\x81\x89\x1a\x81\xe2\xcd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x52\x00\x65\x00\x63\x00\x79\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x42\x00\x69\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
bytes = bytes + "\x00"*(592-len(bytes))
import struct
import codecs
# typedef struct _WIN32_FIND_DATA {
# DWORD dwFileAttributes;
# FILETIME ftCreationTime;
# FILETIME ftLastAccessTime;
# FILETIME ftLastWriteTime;
# DWORD nFileSizeHigh;
# DWORD nFileSizeLow;
# DWORD dwReserved0;
# DWORD dwReserved1;
# TCHAR cFileName[MAX_PATH];
# TCHAR cAlternateFileName[14];
fmt = "<L3Q4L520s28s"
attrs, creation, access, write, sizeHigh, sizeLow, reserved0, reserved1, name, alternateName = struct.unpack(fmt, bytes)
name = codecs.utf_16_le_decode(name)[0].strip('\x00')
alternateName = codecs.utf_16_le_decode(alternateName)[0].strip('\x00')
print name
</code></pre>
<p>注意:这假设MAX_PATH的大小是260(这应该是真的,但是您永远不知道)。在</p>
<p>要从文件中读取所有值,您需要一次读取592个字节的块,然后按上面所述进行解码。在</p>