小编Cas*_* K.的帖子

如何在Python中正确声明ctype结构+联合?

我正在搞乱制作二进制数据解析器,虽然我可以回到C,但我想看看我是否可以使用Python来完成任务.

我对如何实现这一点有所了解,我当前的实现看起来像这样:

from ctypes import *

class sHeader(Structure):
    _fields_ = [("CC", c_uint8, 4),
            ("AFC", c_uint8, 2),
            ("TSC", c_uint8, 2),
            ("PID", c_uint16, 13),
            ("TP", c_uint16, 1),
            ("PSI", c_uint16, 1),
            ("TEI", c_uint16, 1),
            ("SyncByte", c_uint8)]

class Header(Union):
    _fields_ = [("sData", sTsHeader),
            ("ulData", c_uint32)]

head = Header()
head.ulData = 0xffffffff
print(head.ulData)
print(head.sData.SyncByte)

print(sHeader.SyncByte)
print(sHeader.TEI)
print(sHeader.PSI)
print(sHeader.TP)
print(sHeader.PID)
print(sHeader.TSC)
print(sHeader.AFC)
print(sHeader.CC)


print(sizeof(sHeader))
print(sizeof(c_uint8))
print(sizeof(c_uint16))
print(sizeof(c_uint32))
Run Code Online (Sandbox Code Playgroud)

哪个产生这个输出:

V:\>C:\Python27\python.exe WidiUnpacker.py
0xffffffffL
0x0
<Field type=c_ubyte, ofs=4, size=1>
<Field type=c_ushort, ofs=2:15, bits=1>
<Field type=c_ushort, ofs=2:14, bits=1>
<Field type=c_ushort, …
Run Code Online (Sandbox Code Playgroud)

python byte struct ctypes unions

7
推荐指数
2
解决办法
4864
查看次数

标签 统计

byte ×1

ctypes ×1

python ×1

struct ×1

unions ×1