在 Python 中打印 C 无符号字符数组内容的最佳方法是什么,
如果我使用print theStruct.TheProperty
我得到...
<structs.c_ubyte_Array_8 object at 0x80fdb6c>
定义是:
class theStruct(Structure):
_fields_ = [("TheProperty", c_ubyte * 8)]
所需的输出类似于:
Mr Smith
假设它是一个以 null 结尾的字符串,您可以将数组转换为 achar *
并使用它的value
. 这是一个不是这种情况的示例。
>>> class Person(Structure): _fields_ = [("name", c_ubyte * 8), ('age', c_ubyte)]
...
>>> smith = Person((c_ubyte * 8)(*bytearray('Mr Smith')), 9)
>>> smith.age
9
>>> cast(smith.name, c_char_p).value
'Mr Smith\t'
“史密斯先生”填满了数组,因此转换为c_char_p
包括下一个字段的值,即 9(ASCII 选项卡),谁知道还有什么,直到它到达一个空字节。
相反,您可以使用以下方法迭代数组join
:
>>> ''.join(map(chr, smith.name))
'Mr Smith'
或者使用字节数组:
>>> bytearray(smith.name)
bytearray(b'Mr Smith')
蟒蛇 3:
>>> smith = Person((c_ubyte * 8)(*b'Mr Smith'), 9)
>>> bytes(smith.name).decode('ascii')
'Mr Smith'