私は現在、マイクロハード・セルラー・モデムIPn3Gと通信する必要があるプロジェクトに取り組んでいます。私はTCPを介してコンピュータにメッセージを送信するようにモデムを設定しており、ソケットでメッセージを受け取ることができます。Pythonでソケットからバイナリデータを解析するには?
メッセージは、このかかわらず、次のようになります。
���������DKReadyCANRogersWirelessInc. Home354626030393530302720391029547
を今、私は最終的にステータスやCarrierinfoだけでなく、IMEIとIMSIのようなこれらのフィールドのいくつかを認識することができます。
私の問題は、どのように私は面白い見た目を解析するのですか?私は構造体を試しましたが、それは非常に私を助けるように見えませんでした。
Modem_eventメッセージ構造:
- 固定ヘッダ(固定サイズ20バイト)
- モデムID(uint64_tを(8バイト)) 私はこれを発見したモデムのドキュメントで
- メッセージタイプマスク(uint8_t(1バイト))
- 予約
- パケット長(uint16_t(2バイト)) 注:パケット長=固定ヘッダーの長さ+メッセージペイロードの長さ。
キャリア情報:
- コンテンツの長さ2バイト(UINT16_T)
- RSSI 1 BYTE(UINT8_T)
- RFバンド2バイト(UINT16_T)
- サービスタイプSTRING、(1- 30バイト)
- チャネル番号STRING(1-30バイト)
- SIMカード番号STRING(1-30バイト)
- 電話番号STRING(1-30バイト)
私にもそれをすることになっているものと整列しないメッセージのように思えます。誰かがこの問題に取り組む方法について助言を得たなら、私は非常にうれしいでしょう。
は
「どのようなメッセージが表示されますか」あなたのコンソールに印刷されたときはあまり役に立ちません。特にNUL( ''\ x00''')バイトは表示されません。'print message'の代わりに' print repr(message) 'を実行してください。 –
" reserved "の長さを示す文書がありますか? 「ステータスまたはCarrierinfoのようないくつかのフィールドを認識できます」で「または」とはどういう意味ですか? "ステータス"とは何ですか? 「固定ヘッダー」には何が必要ですか? –
@JohnMachin:repr(メッセージ)を含む新しい出力は、 "\ xb7 \ xff \ xff \ xff \ 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