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

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 传出参数)

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

主站蜘蛛池模板: 民丰县| 兴国县| 深圳市| 探索| 攀枝花市| 宣汉县| 汉阴县| 苏尼特左旗| 曲阳县| 沙雅县| 邢台市| 潍坊市| 越西县| 聂荣县| 景谷| 嘉黎县| 咸丰县| 资阳市| 岚皋县| 德令哈市| 龙川县| 塔河县| 肃南| 竹溪县| 北辰区| 清镇市| 济阳县| 墨玉县| 萝北县| 奇台县| 新建县| 晴隆县| 墨江| 东乡族自治县| 湖南省| 唐河县| 平舆县| 东乌珠穆沁旗| 阿尔山市| 盐津县| 抚远县|