国产97色在线 | 日韩,97se狠狠狠狠狼鲁亚洲综合色,成l人在线观看线路1,1313午夜精品理论片,成人免费看片又大又黄

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

問題提出

使用Python上位機軟件時,若通過網(wǎng)口向硬件端發(fā)送命令參數(shù)對儀器進行控制,此時需要將多個參數(shù)打包為字節(jié)流數(shù)據(jù)后進行網(wǎng)絡傳輸,那么,在Python中怎樣將多個參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸呢?

如對于一個具體的例子,將下列參數(shù)打包成字節(jié)流通過網(wǎng)絡傳輸?shù)接布糠?,要求如下?/p>

  • 整個包大小為64Byte
  • 包頭為0X“FAA5 FBB5 FCC4 FDD5”
  • 包尾為0X“5FA5 5FB5 5FC5 5FD5”
  • 中間不足部分補0
  • 所有參數(shù)皆為有符號整型數(shù)字,且初始值、占用字節(jié)數(shù)定義如下:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

解決方法

對于這個問題,可以使用Struct、ctypes、socket等模塊完成,其具體步驟思路為:

1、用ctypes模塊創(chuàng)建64個字節(jié)大小的發(fā)送緩沖區(qū)sendBuffer,代碼如下:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

2、用struct模塊,分別定義包頭(fmt_head)、包身(fmt_body,存儲待發(fā)的具體參數(shù))、包尾(fmt_tail)在字節(jié)流中的數(shù)據(jù)格式,代碼如下:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

3、利用struct模塊的pack_into函數(shù)將待發(fā)內容打包到緩沖區(qū)sendBuffer,代碼如下:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

其中,headInfo和tailInfo定義的是包頭、包尾的信息,即

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

4、通過socket模塊發(fā)送到服務器端,代碼如下:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

備注說明

上面struct模塊中支持的格式如下圖所示:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

打包的后的字節(jié)順序默認上是由操作系統(tǒng)的決定的,struct模塊提供了自定義字節(jié)順序的功能,可以指定大端存儲、小端存儲等特定的字節(jié)順序,對于底層通信的字節(jié)順序是十分重要,不同的字節(jié)順序和存儲方式也會導致字節(jié)大小的不同。在format字符串前面加上特定的符號即可以表示不同的字節(jié)順序存儲方式,例如采用小端存儲 s = struct.Struct(‘<I3sf’)就可以了。其對照列表如下:

Python語言編程系列005——將參數(shù)打包為字節(jié)流進行網(wǎng)絡傳輸方法(python 傳出參數(shù))

版權聲明:本文內容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。