所以我想弄清楚为什么我的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 ctypes结构错误的字节大小的更多相关文章

  1. 如何用swift识别字符串中的大小写字符?

    我知道我可以从swift调用C函数,但是对我来说似乎不正确。我该怎么做才能做到这一点呢?您可以随时查看小写表示与当前值的不同;

  2. 如何检查字符串是否包含Swift中的字母?

    参见英文答案>WhatisthebestwaytodetermineifastringcontainsacharacterfromasetinSwift7个我试图检查一个特定的字符串是否包含字母.到目前为止,我已经看到了NSCharacterSet.letterCharacterSet()作为一组字母,但我无法检查该集合中的一个字符是否在给定的字符串中.当我使用这个代码时,我收到一个错误:‘Cha

  3. Python中的chr()函数与ord()函数解析

    这篇文章主要介绍了Python中的chr()函数与ord()函数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. php – 使用chr rand生成随机字符(A-Z)

    我正在使用以下方法从A-Z生成随机字符,但它偶尔会生成@符号.知道如何防止这种情况吗?也许字符范围不正确?ExampleUsage$randomNumber=izrand;//生成32位数字作为字符串$randomAlphaNumeric=izrand();//生成32位字母数字字符串TypecasttoInteger如果要将数字类型转换为整数,请在执行此操作后执行此操作生成数字.注意:如果它们存在,这将丢弃任何前导零.$randomNumber=$randomNumber;izrand()v2

  5. 在PHP中如何将字节数组转换成字符串?

    我有一个字节数组,我想映射到它们的ASCII等价物.我该怎么做?如果按字节数组表示:array_map()那么就像:的foreach()哪个是紧凑型的:包()但最好的替代方案可能是使用pack(“C*”,[$array…]),即使它需要一个简单的数组解决方法来传递整数列表:如果您可能需要从字节C*切换到字符S*或甚至具有32位整数L*的列表,那么该结构也将更有用.

  6. 正则================================================

    >.*?",@"",@"([\r\n])[\s]+",@"&(quot|#34);",@"&(amp|#38);",@"&(lt|#60);",@"&(gt|#62);",@"&(nbsp|#160);",@"&(iexcl|#161);",@"&(cent|#162);",@"&(pound|#163);",@"&(copy|#169);",@"&#(\d+);",@"-->",@"

  7. 正则表达式:匹配符号

    i)不区分大小写.该标志对组无效.它指定正则表达式匹配时不涉及大小写.(?m)^与$匹配数据内的换行符.(?s).匹配任意字符,包括换行.(?

  8. Ubuntu16.10偶遇linux0.11

    转自:http://www.mamicode.com/info-detail-1321279.html标签:Ubuntu16.10偶遇linux0.11编译环境Ubuntu16.10gcc5.2.1问题集锦1.as86-0-a-oboot/bootsect.oboot/bootsect.smake:as86:命令未找到Makefile:92:recipefortarget‘boot/bootsec

  9. 解析错误:在尝试解析数据框中的JSON列时“追踪垃圾”

    我有一个看起来像this的日志文件.我试图通过以下方式解析Message列中的JSON:但是,我遇到了以下错误:我怎样才能摆脱“拖尾垃圾”?解决方法fromJSON()不是“应用”字符向量,它试图将它全部转换为数据帧.你可以试试@Abdou提供的内容或后两者将创建数据帧.第一个将创建一个列表,您可以添加为列.您可以使用dplyr::bind_cols的最后一个方法创建包含所有数据的新数据框:@Abdou也提出了一个几乎纯粹的基础R解决方案:完整,有效,工作流程:

  10. 德尔福 – 我在哪里可以找到“ESC / POS”爱普生条码测试程序?

    我正在努力让Epson“ESC/POS”打印机打印条形码,并想测试打印机是否有故障.你知道在哪里可以找到在“ESC/POS”中打印条形码的程序吗?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部