• 浅析Python中的struct模块


    http://www.cnblogs.com/coser/archive/2011/12/17/2291160.html

     最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结。

        了解c语言的人,一定会知道struct结构体在c语言中的作用,它定义了一种结构,里面包含不同类型的数据(int,char,bool等等),方便对某一结构对象进行处理。而在网络通信当中,大多传递的数据是以二进制流(binary data)存在的。当传递字符串时,不必担心太多的问题,而当传递诸如int、char之类的基本数据的时候,就需要有一种机制将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据。python中的struct模块就提供了这样的机制,该模块的主要作用就是对python基本类型值与用python字符串格式表示的C struct类型间的转化(This module performs conversions between Python values and C structs represented as Python strings.)。stuct模块提供了很简单的几个函数,下面写几个例子。

    1、基本的pack和unpack

        struct提供用format specifier方式对数据进行打包和解包(Packing and Unpacking)。例如:

     
    import struct
    import binascii
    
    values = (1, 2.7)
    packed_data = struct.pack('if',*values)
    unpacked_data = struct.unpack('if',packed_data)
    
    print('Original values:', values)
    
    print('Packed Value :', binascii.hexlify(packed_data))
    
    print('Unpacked Type :', type(unpacked_data), ' Value:', unpacked_data)
    '''
    Original values: (1, 2.7)
    Packed Value : b'01000000cdcc2c40'
    Unpacked Type : <class 'tuple'>  Value: (1, 2.700000047683716)
    '''
  • 相关阅读:
    InChatter系统之服务器开发(一)
    InChatter系统开源聊天模块前奏曲
    System.Lazy<T>延迟加载
    系统的层级架构
    Android网络通信库Volley简介(转)
    switch case 忘记 break
    switch case 忘记 break
    C# Lock 解读
    JSON资料整理(转载)
    [Leetcode]253. 会议室 II(数组/堆)
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10830138.html
Copyright © 2020-2023  润新知