python bit位域操作的对齐问题

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

定义了某个位域占多少个bit;但是python为了字节对齐,还是会在中间插入很多0;
后来加了_pack_ = 1 对某些情况还是有0插入;
_pack_ = 1 感觉有bug存在

在使用ctypes的时候, 位域必须用8bit对齐,只有人工把原来的位域拆开,才能解决这个问题

class mac_table_s(Structure):
    _pack_ = 1
    _fields_ =[("outer_ethtype_sel",c_uint8,3), #b0 2:0
            ("outer_pcp_data",c_uint8,3),    #b0 5:3
            ("outer_pcp_operation",c_uint8,2) #b0 7:6
            ]
class mac_table_u(Union):
    _fields_ = [("fields", mac_table_s),
                            ("packed", c_uint32*MAC_TABLE_SIZE_32BITWORDS)    ]

union 共享内存 fieldspacked共享内存,
可以实现在fields中定义各个位域,然后使用packed 以32bit为单位将reg写入

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看