4

在 Python 中打印 C 无符号字符数组内容的最佳方法是什么,

如果我使用print theStruct.TheProperty

我得到...

<structs.c_ubyte_Array_8 object at 0x80fdb6c>

定义是:

class theStruct(Structure): _fields_ = [("TheProperty", c_ubyte * 8)]

所需的输出类似于: Mr Smith

4

1 回答 1

4

假设它是一个以 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'
于 2012-11-19T16:03:15.783 回答