澳门最精准正最精准龙门,孙庞斗智打一动物,顶天立地指什么生肖,生不逢时打一生肖

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

问题提出

使用Python上位机软件时,若通过网口向硬件端发送命令参数对仪器进行控制,此时需要将多个参数打包为字节流数据后进行网络传输,那么,在Python中怎样将多个参数打包为字节流进行网络传输呢?

如对于一个具体的例子,将下列参数打包成字节流通过网络传输到硬件部分,要求如下:

  • 整个包大小为64Byte
  • 包头为0X“FAA5 FBB5 FCC4 FDD5”
  • 包尾为0X“5FA5 5FB5 5FC5 5FD5”
  • 中间不足部分补0
  • 所有参数皆为有符号整型数字,且初始值、占用字节数定义如下:

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

解决方法

对于这个问题,可以使用Struct、ctypes、socket等??橥瓿桑渚咛宀街杷悸肺?/p>

1、用ctypes模块创建64个字节大小的发送缓冲区sendBuffer,代码如下:

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

2、用struct???,分别定义包头(fmt_head)、包身(fmt_body,存储待发的具体参数)、包尾(fmt_tail)在字节流中的数据格式,代码如下:

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

3、利用struct??榈膒ack_into函数将待发内容打包到缓冲区sendBuffer,代码如下:

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

其中,headInfo和tailInfo定义的是包头、包尾的信息,即

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

4、通过socket模块发送到服务器端,代码如下:

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

备注说明

上面struct??橹兄С值母袷饺缦峦妓荆?/p>

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

打包的后的字节顺序默认上是由操作系统的决定的,struct??樘峁┝俗远ㄒ遄纸谒承虻墓δ?,可以指定大端存储、小端存储等特定的字节顺序,对于底层通信的字节顺序是十分重要,不同的字节顺序和存储方式也会导致字节大小的不同。在format字符串前面加上特定的符号即可以表示不同的字节顺序存储方式,例如采用小端存储 s = struct.Struct(‘<I3sf’)就可以了。其对照列表如下:

Python语言编程系列005——将参数打包为字节流进行网络传输方法(python 传出参数)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

主站蜘蛛池模板: 新建县| 兴安盟| 应用必备| 彝良县| 友谊县| 大连市| 沂源县| 平果县| 哈密市| 镇巴县| 伽师县| 金山区| 崇文区| 南皮县| 霸州市| 澄江县| 灵宝市| 东乡| 张北县| 安化县| 体育| 自贡市| 阿图什市| 昌黎县| 阿巴嘎旗| 盐池县| 兴安盟| 托克逊县| 应城市| 依兰县| 日照市| 龙游县| 桐城市| 洱源县| 阜阳市| 崇州市| 衡阳市| 高要市| 南靖县| 伊吾县| 顺昌县|