Python与C、C++交互的时候,如果进行网络消息的收发,需要讲数据打包解包为字节流。

这时候就会用到Struct模块中的pack、unpack函数

打包:

        PKG = ''# '!' means network byte#PkgHeadPKG += pack('!i', 0x54434d)        #intPKG += pack('!H', 4)        #ushortPKG += pack('!i', calcsize('!iiHiiiiIic'))        #length int    35PKG += pack('!i', 1)        #intPKG += pack('!i', 0)        #intPKG += pack('!i', 0)        #intPKG += pack('!I', 0)        #uintPKG += pack('!i', 0)        #int#PkgBodyPKG += pack('!i', 1)        #intPKG += pack('!c', '0')        #char               

pack函数第一个参数是要打包的数据类型,第二个参数是要打包的值,其中 calcsize 方法是自动计算类型字节长度

解包一样

def upk(PKG):iRet = Trueif unpack('!i', PKG[0:4])[0] != 0x54434d:iRet = Falseif unpack('!H', PKG[4:6])[0] != 4:iRet = Falseif unpack('!i', PKG[6:10])[0] !=35:iRet = Falseif unpack('!i', PKG[10:14])[0] != 2:iRet = Falseif unpack('!i', PKG[14:18])[0] != 0:iRet = Falseif unpack('!i', PKG[18:22])[0] != 0:iRet = Falseif unpack('!i', PKG[22:26])[0] != 0:iRet = Falseif unpack('!i', PKG[26:30])[0] != 0:iRet = Falseif unpack('!i', PKG[30:34])[0] != 2:iRet = Falsereturn iRet

解包后的结果是一个tuple,即使只有一个元素。

详情可参考: http://docs.python.org/library/struct.html?highlight=pack#struct.pack

转载于:https://www.cnblogs.com/gmark/archive/2012/09/27/2706368.html

[Python]网络打解包相关推荐

  1. Python中的解包用法

    Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用.封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用. 可迭代对象支持解 ...

  2. python中的解包操作

    在看别人写的python代码的时候,有时候会看到在变量前面加上一个*或者是**,上网找了一下相关的资料发现这些星号原来是python中的解包操作,相当于将一个容器中的元素取出来然后分配给不同的变量,下 ...

  3. Python 进阶 - 元组解包

    1. 定义 什么是元组解包?元组解包也叫'元组拆包','迭代对象解包' 等.也就是把批量的数据进行批量的赋值.当然不只是tuple,任何可迭代对象都支持解包,还包括dict.set.string等一切 ...

  4. python * ** 用法 python中的“解包符”

    '*' '**' > python中的"解包符" 1.单个'*' 去掉list,tuple,set的"外套" >>> [*[1,2,3] ...

  5. python中拆包解包用法详解

    python可以对元组和字典进行拆包或解包操作. 1.拆包:元组 示例代码1: def return_num():return 100, 200num1, num2 = return_num() pr ...

  6. Python中的解包

    一.解包,英文名字叫UNPACKING,就是讲容器中所有的元素逐个取出来. python中解包是自动完成的,例如: a,b,c = ['1','2','3'] print(a,b,c) 1 2 3 除 ...

  7. python中序列解包_Python3 序列解包

    转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...

  8. Python的argv怎么使用(Python参数、解包和变量)

    argv:即所谓的参数变量,这个变量保存着你运行Python脚本时传递给Python脚本的参数. 解包:把argv中的东西取出来,将所有的参数依次赋值给左边的变量. 在argv.py文件中输入以下代码 ...

  9. 【Python网络开发-黏包问题(三)黏包问题的解决办法】

    23_黏包问题的解决办法 一.目前较合理的处理方法: 为字节流加上一个报头,告诉发送的字节流总大小,让后接收端来一个死循环接收完所有数据.用struck将序列化的数据长度打包成4个字节. 使用stru ...

最新文章

  1. POJ1321 棋盘问题
  2. 11 Python Pandas tricks that make your work more efficient
  3. wenstorm设置谷歌_WebStorm+Chrome调试Vue步骤
  4. Linux 之目录 -鸟哥的Linux私房菜
  5. python炼丹师是什么_2021年编程语言趋势预测:Python和JavaScript仍火热,Go不可小觑...
  6. xml转换为json格式时,如何将指定节点转换成数组 Json.NET
  7. 绝佳时机,前所未遇,让艰巨作业全自动化
  8. 关于Fedora8中DNS配置问题解决
  9. 通达信zig函数的python实现
  10. python如何释放对象_如何正确清理Python对象?
  11. 什么是 CI/CD?
  12. C4D动画如何提交云渲染农场快速渲染?
  13. pos收银系统 php,POS收银系统
  14. 使用Universal Image Loader- Image can't be decoded
  15. 核心期刊《河北医学》杂志简介及投稿要求
  16. 【Java 8 新特性】Java Comparator.naturalOrder | 自然排序
  17. 杨浦搬场公司搬家过程中的注意事项
  18. 计算机工程科学怎么翻译,汉英机器翻译中汉语篇章时间信息系统模型 - 计算机工程与科学.pdf...
  19. 信号与系统陈后金matlab,信号与系统(陈后金)_MATLAB.ppt
  20. Watch OS开发笔记

热门文章

  1. CSS-in-JS的权衡
  2. gulp-sass_如果您是初学者,如何使用命令行设置Gulp-sass
  3. display会影响canvas吗_多动症会影响智商吗?
  4. java gettickcount_linux上的GetTickCount函数
  5. 64 安装_解决“不能安装 64 位Office,因已安装 32 位 Office 产品”问题
  6. Java断点续传(基于socket与RandomAccessFile的实现)
  7. 12 Java面向对象之多态
  8. 【刷算法】LeetCode- 两数之和
  9. linux学习笔记一
  10. 驱动07.USB驱动程序