2

私は現在、マイクロハードセルラーモデムIPn3Gと通信する必要があるプロジェクトに取り組んでいます。TCPを介してコンピュータにメッセージを送信するようにモデムを設定しており、ソケットでメッセージを受信できます。

ただし、メッセージは次のようになります。

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

これで、StatusやCarrierinfoのようなこれらのフィールドのいくつかと、最終的にはimeiとimsiを認識できます。

私の問題は、どうすれば変な見た目のものを解析できるかということです。構造体を試しましたが、あまり役に立たなかったようです。

モデムのドキュメントで私はこれだけを見つけました:

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バイト)
  • 電話番号STRING(1-30バイト)

私には、メッセージが本来あるべきものと一致していないように思えます。この問題に取り組む方法について誰かがアドバイスをくれたらとてもうれしいです。

ありがとうございました

4

1 に答える 1

0

Python には優れたstructモジュールがあり、バイナリ データをパックおよびアンパックできます。

なるほど、あなたはすでにそれを使おうとしました。お使いのデバイスのドキュメントはありません (行って確認してください!) が、文字列は null で終了していると推測できます (以前にサイズが指定されていません)。

メッセージの文字列部分のサイズを (他のフィールドのサイズとパケット長から) 取得し、すべての文字列を 1 つの Python 文字列に読み取り<number>s、null 文字を見つけて分割します。

于 2012-04-27T22:49:25.243 に答える