这是一个人为的例子,说明我们的很多类如何返回自己的二进制表示(由C++读取).
def to_binary(self):
'Return the binary representation as a string.'
data = []
# Binary version number.
data.append(struct.pack('<I', [2]))
# Image size.
data.append(struct.pack('<II', *self.image.size))
# Attribute count.
data.append(struct.pack('<I', len(self.attributes)))
# Attributes.
for attribute in self.attributes:
# Id.
data.append(struct.pack('<I', attribute.id))
# Type.
data.append(struct.pack('<H', attribute.type))
# Extra Type.
if attribute.type == 0:
data.append(struct.pack('<I', attribute.typeEx))
return ''.join(data)
Run Code Online (Sandbox Code Playgroud)
我不喜欢的事:
data.append(struct.pack(该行的独特部分分散注意力.'<')一遍又一遍地重复.''.join(data).我喜欢什么:
self.image.size是作为两个无符号整数写出来的.是否有更可读/ pythonic的方式来做到这一点?
from StringIO import StringIO
import struct
class BinaryIO(StringIO):
def writepack(self, fmt, *values):
self.write(struct.pack('<' + fmt, *values))
def to_binary_example():
data = BinaryIO()
data.writepack('I', 42)
data.writepack('II', 1, 2)
return data.getvalue()
Run Code Online (Sandbox Code Playgroud)