[Python]网络打解包
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]网络打解包相关推荐
- Python中的解包用法
Python中的解包用法 解包(unpacking:解包,拆包),基本意思将容器里面的元素逐个取出来使用.封包(packing:封包,打包)基本意思将多个元素合起来作为一个整体使用. 可迭代对象支持解 ...
- python中的解包操作
在看别人写的python代码的时候,有时候会看到在变量前面加上一个*或者是**,上网找了一下相关的资料发现这些星号原来是python中的解包操作,相当于将一个容器中的元素取出来然后分配给不同的变量,下 ...
- Python 进阶 - 元组解包
1. 定义 什么是元组解包?元组解包也叫'元组拆包','迭代对象解包' 等.也就是把批量的数据进行批量的赋值.当然不只是tuple,任何可迭代对象都支持解包,还包括dict.set.string等一切 ...
- python * ** 用法 python中的“解包符”
'*' '**' > python中的"解包符" 1.单个'*' 去掉list,tuple,set的"外套" >>> [*[1,2,3] ...
- python中拆包解包用法详解
python可以对元组和字典进行拆包或解包操作. 1.拆包:元组 示例代码1: def return_num():return 100, 200num1, num2 = return_num() pr ...
- Python中的解包
一.解包,英文名字叫UNPACKING,就是讲容器中所有的元素逐个取出来. python中解包是自动完成的,例如: a,b,c = ['1','2','3'] print(a,b,c) 1 2 3 除 ...
- python中序列解包_Python3 序列解包
转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...
- Python的argv怎么使用(Python参数、解包和变量)
argv:即所谓的参数变量,这个变量保存着你运行Python脚本时传递给Python脚本的参数. 解包:把argv中的东西取出来,将所有的参数依次赋值给左边的变量. 在argv.py文件中输入以下代码 ...
- 【Python网络开发-黏包问题(三)黏包问题的解决办法】
23_黏包问题的解决办法 一.目前较合理的处理方法: 为字节流加上一个报头,告诉发送的字节流总大小,让后接收端来一个死循环接收完所有数据.用struck将序列化的数据长度打包成4个字节. 使用stru ...
最新文章
- POJ1321 棋盘问题
- 11 Python Pandas tricks that make your work more efficient
- wenstorm设置谷歌_WebStorm+Chrome调试Vue步骤
- Linux 之目录 -鸟哥的Linux私房菜
- python炼丹师是什么_2021年编程语言趋势预测:Python和JavaScript仍火热,Go不可小觑...
- xml转换为json格式时,如何将指定节点转换成数组 Json.NET
- 绝佳时机,前所未遇,让艰巨作业全自动化
- 关于Fedora8中DNS配置问题解决
- 通达信zig函数的python实现
- python如何释放对象_如何正确清理Python对象?
- 什么是 CI/CD?
- C4D动画如何提交云渲染农场快速渲染?
- pos收银系统 php,POS收银系统
- 使用Universal Image Loader- Image can't be decoded
- 核心期刊《河北医学》杂志简介及投稿要求
- 【Java 8 新特性】Java Comparator.naturalOrder | 自然排序
- 杨浦搬场公司搬家过程中的注意事项
- 计算机工程科学怎么翻译,汉英机器翻译中汉语篇章时间信息系统模型 - 计算机工程与科学.pdf...
- 信号与系统陈后金matlab,信号与系统(陈后金)_MATLAB.ppt
- Watch OS开发笔记
热门文章
- CSS-in-JS的权衡
- gulp-sass_如果您是初学者,如何使用命令行设置Gulp-sass
- display会影响canvas吗_多动症会影响智商吗?
- java gettickcount_linux上的GetTickCount函数
- 64 安装_解决“不能安装 64 位Office,因已安装 32 位 Office 产品”问题
- Java断点续传(基于socket与RandomAccessFile的实现)
- 12 Java面向对象之多态
- 【刷算法】LeetCode- 两数之和
- linux学习笔记一
- 驱动07.USB驱动程序