2016-09-02 1 views
0

J'ai défini une structure:Python3 ctypes Le tableau c_char a-t-il été converti en un type octets immuable?

class test(Structure): 
    _fields_ = [('char_array', c_char * 255)] 

a = test() 

# prints <class 'bytes'> 
print(type(a.char_array)) 

Pourquoi ce type bytes et non de type bytearray? Je ne parviens pas à modifier les valeurs dans char_array car les octets ne prennent pas en charge l'affectation d'éléments. i.e: a.char_array[0] = 1

Ce n'est pas le cas si je devais utiliser c_int; juste curieux pourquoi ctypes convertit ceci en objet bytes et ne le laissant pas comme c_char_Array_255 comme si c'était c_int * 255?

Comment puis-je convertir à un bytearray et toujours modifier la structure en conséquence?

Répondre

1

Le type c_char correspond au type immuable.

Utiliser le type c_byte pour être en mesure de modifier cela. Exemple:

from ctypes import * 

class test(Structure): 
    _fields_ = [('char_array', c_byte * 255)] 

a = test() 

print(type(a.char_array)) 
a.char_array[0]=ord('e') 
a.char_array[1]=ord('x') 
print(bytes(a.char_array).decode()) 

impressions ex

+0

Oui; J'ai oublié le type 'c_byte'; Je vous remercie. – jacob