ctypes显示不正确的字节大小

时间:2018-04-10 18:09:05

标签: python python-3.x python-2.7

import ctypes
from ctypes import *
import sys



class A(Structure):
    _fields_ = [("a",c_uint64),
        ("b",c_uint64),
        ("c",c_uint64),
        ("d",c_uint64),
        ("e",c_uint64),
        ("f",c_uint64),
        ("g",c_uint64),
        ("h",c_uint64),
        ("i",c_uint64),
        ("j",c_uint64),
        ("k",c_uint64),
        ("l",c_uint64),
        ("m",c_uint64),
        ("n",c_uint64),
        ("o",c_uint64),
        ("p",c_uint64),
        ("q",c_uint64),
        ("r",c_uint64*16),
        ("s",c_uint64*16),
        ("t",c_uint64*16),
        ("u",c_uint64*16),
        ("v",c_uint64*16),
        ("w",c_uint64),
        ("x",c_uint64),
        ("y",c_uint64),
        ("z",c_uint64)
        ]

class B(Structure):
    _fields_ = [("a1",c_uint64),
                ("b1",c_uint64),
                ("c1",c_uint64)
           ]

class C(Structure):
    _fields_ = [("a2",c_uint64*32),
                ("b2",c_uint64*32),
                ("c2",c_uint64)
               ]


class U_union(Union):
    _fields_ = [("a3", A),
        ("b3",B),
        ("c3",C),
        ("d3",c_uint32),
        ("e3",c_uint32)
        ]


class ether_header(Structure):
   _fields_ = [("ether_dhost", c_uint8*6),
           ("ether_shost", c_uint8*6),
           ("ether_type", c_uint16)
          ]

class D(Structure):
    _fields_ = [ ("ether",ether_header),
         ("a4", c_uint8),
                 ("b4", c_uint8),
                 ("c4", c_uint8),
                 ("d4", c_uint8),
                 ("e4", c_uint16),
                 ("f4",U_union),
        ]


class Send:
    def __init__(self,a):
        file=D()
        print sizeof(file)

if __name__== "__main__":
    Send("hello")

我必须发送830字节结构。这里有双填充(每个2字节)。 这是我的示例代码,ETHER_HEAD结构是14个字节,没有ether_head结构成员的FILE_HEAD是816个字节,而ether_head成员是832个字节。如何添加2个字节? 而我正在尝试其他scenerio喜欢只发送830字节像连接2个结构,但如果我为两个类创建两个对象引用并在objets之间制作+运算符它显示无法连接对象错误。我可以模拟它吗?

0 个答案:

没有答案