python ctypes结构错误的字节大小
发布时间:2020-11-18 06:35:19 所属栏目:Python 来源:互联网
导读:所以我想弄清楚为什么我的ctypes.Structure的大小不应该是它应该是什么.我的代码如下,还有计算大小应该是什么. class FILE_HEAD(ctypes.Structure): _fields_ = [ (name, ctypes.c_char * 4), # 4 bytes (size, cty
所以我想弄清楚为什么我的ctypes.Structure的大小不应该是它应该是什么.我的代码如下,还有计算大小应该是什么. class FILE_HEAD(ctypes.Structure): _fields_ = [ ("name",ctypes.c_char * 4),# 4 bytes ("size",ctypes.c_int),# 4 bytes ("Cal_l",ctypes.c_double),# 8 bytes ("Cal_r",# 8 bytes ("Speed_ChL",ctypes.c_byte),# 1 byte ("Speed_Pulses_ChL",# 4 bytes ("Speed_factor_ChL",# 8 bytes ("Quantity_ChL",ctypes.c_char * 3),# 3 bytes ("Description_ChL",ctypes.c_char * 32),# 32 bytes ("Unit_ChL",ctypes.c_char * 8),# 8 bytes ("Speed_ChR",# 1 byte ("Speed_Pulses_ChR",# 4 bytes ("Speed_factor_ChR",# 8 bytes ("Quantity_ChR",# 3 bytes ("Description_ChR",# 32 bytes ("Unit_ChR",ctypes.c_char * 8) # 8 bytes ] # = 136 bytes 所以我认为Structure应该有136个字节的大小.但是,当我让python打印结构的实例大小打印ctypes.sizeof(COMI_HEAD)时,我得到144.我不知道那8个字节来自哪里. 我用以下数据填充了它并将其写入文件以查看所有字节并分析字节的位置. comi = FILE_HEAD() comi.name = "COMI" comi.size = ctypes.sizeof(comi) - 8 comi.Cal_l = 342.324 comi.Cal_r = 342.324 comi.Speed_ChL = ctypes.c_byte(1) comi.Speed_Pulses_ChL = 123 comi.Speed_factor_ChL = 123.456 comi.Quantity_ChL = "Tes" comi.Description_ChL = "Test Desc" comi.Unit_ChL = "t/t" comi.Speed_ChR = ctypes.c_byte(1) comi.Speed_Pulses_ChR = 123 comi.Speed_factor_ChR = 123.456 comi.Quantity_ChR = "Tes" comi.Description_ChR = "Test Desc" comi.Unit_ChR = "t/t" 这是我的HEX-Viewer向我展示的内容.我标记为红色,我认为哪些字节是8个字节太多,但我不知道这8个字节来自哪里.我标记的前3个字节直接来自Speed_ChL,它应该是1个字节,但看起来像4个字节.我标记的接下来的5个字节位于文件的末尾.这个字符串Unit_ChR应该是8个字节,但看起来像是13个字节. 谁能告诉我我的错误在哪里?我在这做错了什么?任何帮助表示赞赏! 解决方法好的,我找到了解决方案.感谢Andreas告诉我,我的问题与 offset有关.所以解决方法是在结构中添加一个_pack_ = 1.class FILE_HEAD(ctypes.Structure): _pack_ = 1 _fields_ = [ ("name",ctypes.c_char * 8) # 8 bytes ] # = 136 bytes (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何使用python查询mongodb中的不同结果?
- python-2.7 – Pandas:基于空行拆分数据框
- python – 将numpy.array中的每个元素与numpy.array中的每个
- python – 如何找到可能有重复数字的3个列表之间的区别
- 解密Python中的描述符(descriptor)
- python – matplotlib.pyplot.imshow:在使用属性“sharex”
- python – 高级自定义排序
- Python – 有没有办法等待os.unlink()或os.remove()完成?
- 如何从python源代码中删除注释和doc字符串?
- 如何在Python中单个测试的持续时间内替换类变量?