开发者

Get the binary representation of a ctypes Structure in Python

I want to encode a message...This is the message that i have generated

from ctypes import memmove, addressof, Structure, c_uint16,c_bool

class AC(Structure):
    _fields_ = [("UARFCN",  c_uint16),
                 ("ValidUARFCN", c_bool ),("PassiveActivationTime", c_uint16) ]

    def __init__(self , UARFCN ,ValidUARFCN , PassiveActivationTime):
            self.UARFCN                 =    UARFCN
            self.ValidUARFCN            =    True
            self.PassiveActivationTime  =    PassiveActivationTime

    def __str__(self):
        s = "AC"
        s += "UARFCN:"  + str(self.UARFCN)
      开发者_高级运维  s += "ValidUARFCN"  + str(self.ValidUARFCN)
        s += "PassiveActivationTime"  +str(self.PassiveActivationTime)
        return s

class ABCD(AC):
        a1 = AC( 0xADFC , True , 2)
        a2 = AC( 13 , False ,5)
        print a1
        print a2

I want to encode it and then store it in a variable.....So how can i do it???


For C structures, all you have to do to write it to a file is open the file, then do

fileobj.write(my_c_structure).

Then you can reload it by opening the file and doing

my_c_structure = MyCStructure()
fileobj.readinto(my_c_structure)

All you need is to make your __init__ arguments optional. See this post on Binary IO. It explains how to send Structure over sockets or with multiprocessing Listeners.

To save it in a string / bytes just do

from io import BytesIO # Or StringIO on old Pythons, they are the same
fakefile = BytesIO()
fakefile.write(my_c_structure)
my_encoded_c_struct = fakefile.getvalue()

Then read it back out with

from io import BytesIO # Or StringIO on old Pythons, they are the same
fakefile = BytesIO(my_encoded_c_struct)
my_c_structure = MyCStructure()
fakefile.readinto(my_c_structure)

Pickle and the like are not necessary. Neither is struct.pack though it would work. It's just more complicated.

Edit: also see the linked answer at How to pack and unpack using ctypes (Structure <-> str) for another method for doing this.

Edit 2: See http://doughellmann.com/PyMOTW/struct or http://effbot.org/librarybook/struct.htm for struct examples.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜