2012-04-27 31 views
1

我目前正在開發一個項目,需要與微硬調制解調器IPn3G進行通信。我有調制解調器設置爲通過TCP向我的計算機發送消息,我可以在套接字中接收消息。如何在python中解析來自套接字的二進制數據?

的消息是這樣的,雖然:

���������DKReadyCANRogersWirelessInc. Home354626030393530302720391029547 

現在,我可以承認其中的一些領域,如最終狀態或Carrierinfo還有IMEI和IMSI的。

我的問題是,我該如何解析有趣的東西?我嘗試過struct,但它似乎沒有幫我很多。

在調制解調器我只找到這個的文檔:

Modem_event消息結構:

  • 固定報頭(固定大小20個字節)
  • 調制解調器ID(uint64_t中(8個字節))
  • 消息類型掩膜(uint8_t(1個字節))
  • 保留
  • 分組長度(uint16_t(2個字節)) 注意:數據包長度=固定報頭長度+報文有效載荷長度。

載波信息:

  • 內容長度2個字節(UINT16_T)
  • RSSI 1字節(UINT8_T)
  • RF頻帶2個字節(UINT16_T)
  • 服務類型STRING(1- 30個字節)
  • 通道號STRING(1-30字節)
  • SIM卡號STRING(1-30字節)
  • 手機串號(1-30字節)

對我來說,這似乎是消息不即使它應該是排隊。如果有人就如何解決這個問題提出建議,我會很高興。

謝謝

+1

什麼信息「看起來像」例如當打印到您的控制檯不是很有用。特別是任何NUL(''\ x00'')字節不太可能出現。文檔顯示「保留」的時間長度是多少?而不是「打印消息」是否打印重新生成(消息)' – 2012-04-28 00:19:50

+0

? 「我可以識別一些像Status或Carrierinfo這樣的字段」中的「或」是什麼意思?什麼是「狀態」?什麼應該在「固定標題」? – 2012-04-28 00:28:29

+0

@JohnMachin:repr(message)的新輸出是「\ xb7 \ xff \ xff \ xff \ xff \ xff \ xff \ xff \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00Z \ x00D \ X00 \ XF3 \ X00 \ x00Ready \ x00CANRogersWirelessInc。\ x00Home \ x00354626030393530 \ x00302720391029547 \ X00" 。 – masterlampe 2012-04-28 16:38:31

回答

0

Python有很大struct模塊,它可以讓你打包和解包二進制數據。

我明白了,您已經嘗試過使用它。我沒有文檔,對於你的設備(去檢查它!),但我可以假設,這些字符串是空終止的(它們沒有它們的大小)。

獲取消息的字符串部分的大小(從其他字段和數據包長度的大小),並使用<number>s將所有字符串讀入一個Python字符串,並將它們拆分爲空字符。

相關問題