zoukankan      html  css  js  c++  java
  • python struct.pack中的对齐字节问题

    最近测试涉及到了序列字节化相关问题,碰到一个头疼的问题

    buff = struct.pack("3s","B00")
        print repr(buff)

    输出:'B00'

     buff = struct.pack('i',10172)
     print repr(buff)

    输出:"xbc'x00x00"

    buff = struct.pack("3si","B00",10172)
    print repr(buff)

    输出:"B00x00xbc'x00x00"

    即:struct.pack("3s","B00")+struct.pack('i',10172) != struct.pack("3si","B00",10172)

    但struct.pack("!3s","B00")+struct.pack('!i',10172) == struct.pack("!3si","B00",10172)是相等的

    问题分析:

    为了同c中的结构体交换数据,还要考虑有的c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下:

    CharacterByte orderSize and alignment
    @ native native            凑够4个字节
    = native standard        按原字节数
    < little-endian standard        按原字节数
    > big-endian standard       按原字节数
    ! network (= big-endian)

    standard       按原字节数

    使用方法是放在fmt的第一个位置,就像'@5s6sif'

    参见如下

    http://www.coder4.com/archives/3838

    http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html

    http://zhidao.baidu.com/link?url=Wd7SipMBMz7-lCTtnV3kUmjF4OMlRqZZUtfY0Zb3SqF5HKsCbwUBJFw8s2FfpTTv55Y-o-YHctDEfJoQ_ILTYAM8-sOWvOPS4aJtlHffNZ_

  • 相关阅读:
    geowebcache发布 arcgis 瓦片
    BLANK
    基于 SpringBoot 高仿某度网盘项目,前后端分离(含源码)
    基于SpringBoot+WebMagic实现一个的爬虫框架
    博客园主题
    vue el 自动计算时间加1天
    python报警告qt.gtimg.cn
    量化交易日志
    mybatis 一对多。对多对
    DBeaver执行SQL脚本,导入导出
  • 原文地址:https://www.cnblogs.com/xywq/p/4898373.html
Copyright © 2011-2022 走看看