美文网首页
python对bytes字节流的处理 struct模块 快速上手

python对bytes字节流的处理 struct模块 快速上手

作者: 生活就是爱 | 来源:发表于2020-06-07 10:17 被阅读0次

    最近使用struct模块二进制字节流进行读取操作,网上挺多教程都写的挺好的,不过对新手不是很友好
    找到有一份笔记可以快速上手,不过格式不大友好,我自己跑了一遍,过程展示出来,向原作者致敬

    使用bin_buf = struct.pack(fmt, buf)将buf为二进制数组bin_buf
    使用buf = struct.unpack(fmt, bin_buf)将bin_buf二进制数组反转换回buf

    1. 整型数 -> 二进制流

    buf1 = 256
    bin_buf1 = struct.pack('i', buf1) # 'i'代表'integer'    
    ret1 = struct.unpack('i', bin_buf1)
    print(bin_buf1, '  <====>  ', ret1)
    

    结果如下:

    b'\x00\x01\x00\x00'   <====>   (256,)
    

    2. 浮点数 -> 二进制流

    buf2 = 3.1415
    bin_buf2 = struct.pack('d', buf2) # 'd'代表'double'    
    ret2 = struct.unpack('d', bin_buf2)
    print(bin_buf2, '  <====>  ', ret2)
    

    结果如下:

    b'o\x12\x83\xc0\xca!\t@'   <====>   (3.1415,)
    

    3. 字符串 -> 二进制流

    buf3 = 'Hello World'
    bin_buf3 = struct.pack('11s', buf3) # '11s'代表长度为11的'string'字符数组    
    ret3 = struct.unpack('11s', bin_buf3)
    print(bin_buf3, '  <====>  ', ret3)
    

    结果如下:

    b'Hello World'   <====>   (b'Hello World',)
    

    4. 结构体 -> 二进制流

    # 假设有一个结构体    
    # struct header {    
    #   int buf1;    
    #   double buf2;    
    #   char buf3[11];    
    # }    
    bin_buf_all = struct.pack('id11s', buf1, buf2, buf3)
    ret_all = struct.unpack('id11s', bin_buf_all)
    print(bin_buf_all,'  <====>  ', ret_all)
    

    结果如下:

    b'\x00\x01\x00\x00\x00\x00\x00\x00o\x12\x83\xc0\xca!\t@Hello World'   <====>   (256, 3.1415, b'Hello World')
    

    参考资料:
    Python中对字节流/二进制流的操作:struct模块简易使用教程

    相关文章

      网友评论

          本文标题:python对bytes字节流的处理 struct模块 快速上手

          本文链接:https://www.haomeiwen.com/subject/fuggzhtx.html