擅长:python、mysql、java
<p>比你想象的容易。<code>ctypes.Structure</code>支持缓冲区协议,因此您可以直接执行以下操作:</p>
<pre><code>buf = Example_Structure()
file_object.readinto(buf)
</code></pre>
<p>示例:</p>
<pre><code>from ctypes import *
class Example_Structure(Structure):
_fields_ = [
("a", c_uint16),
("b", c_uint16, 14),
("c", c_uint16, 2),
("d", c_uint16)
]
# Create some raw test data
with open('test.bin','wb') as f:
f.write(b'\x22\x33\xff\x7f\xaa\x55')
buf = Example_Structure()
with open('test.bin','rb') as file_object:
file_object.readinto(buf) # Will read sizeof(buf) bytes from file
print(f'{buf.a:04x} {buf.b:04x} {buf.c:04x} {buf.d:04x}')
</code></pre>
<p>输出:</p>
<pre><code>3322 3fff 0001 55aa
</code></pre>