2012-11-19 124 views
3

什麼是打印在Python一個C無符號字符數組的內容,最好的辦法,如何打印c_ubyte_Array對象在Python

如果我使用print theStruct.TheProperty

我得到...

<structs.c_ubyte_Array_8 object at 0x80fdb6c>

的定義是:

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

所需的輸出是這樣的: Mr Smith

+0

的最佳方式打印任何對象是一個給出所需的輸出。除非你不指定你想要的輸出是什麼,否則只能說這個。 – Bakuriu

+0

我編輯了這個問題 – Awalias

回答

3

假設它是一個空值終止字符串,可以在陣列轉換爲char *,並使用其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') 

的Python 3:

>>> smith = Person((c_ubyte * 8)(*b'Mr Smith'), 9) 
>>> bytes(smith.name).decode('ascii') 
'Mr Smith'