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_

  • 相关阅读:
    【卷积】卷积的理解
    【cs231n】神经网络学习笔记3
    【cs231n】神经网络笔记笔记2
    【cs231n】神经网络学习笔记1
    【cs231n】卷积神经网络
    【cs231n】反向传播笔记
    【cs231n】最优化笔记
    【cs231n】图像分类笔记
    【cs231n】线性分类笔记
    关于struts中Ognl和iterator配合再次理解
  • 原文地址:https://www.cnblogs.com/xywq/p/4898373.html
Copyright © 2011-2022 走看看