def __str__(self):
longest_name = max([len(k[0]) for k in self._fields_])
indent_fmt = '{{:>{}s}}: {{}}\n'.format(longest_name)
indent_verbose_fmt = '{{:>{}s}}: {{}} ({{}})\n'.format(longest_name)
out = ''
for k in self._fields_:
value = getattr(self, k[0])
if k[0] in ('chaddr', 'sname', 'file'):
value = ctypes.cast(value, c_char_p).value
out += indent_fmt.format(k[0], value.hex() if PY3 else value.encode('hex'))
elif k[0] in ('xid'):
out += indent_verbose_fmt.format(k[0], value, hex(value).rstrip('L'))
elif k[0] in ('flags'):
out += indent_verbose_fmt.format(k[0], value, 'broadcast' if value & 0x8000 else hex(value))
elif k[0] in ('op'):
out += indent_verbose_fmt.format(k[0], value, opcodes.get(value, '?'))
elif k[0] in ('htype'):
out += indent_verbose_fmt.format(k[0], value, hw_types.get(value, '?'))
elif k[0] in ('ciaddr', 'yiaddr', 'siaddr', 'giaddr'):
out += indent_verbose_fmt.format(k[0], value, int_to_ip(value))
else:
out += indent_fmt.format(k[0], value)
return out.rstrip()
评论列表
文章目录