2

ATWindows 7 PCのUSBポートに接続されたGSMモデムを介してSMSメッセージを送受信する(仮想シリアルポートに送信されるコマンドを使用する)コードが少しあります(偶然にも.netにありますが、それは問題ではないと思います)。 .

通常は正常に動作します (受信するメッセージのほとんどを理解できるという点で) が、AT+CMGLコマンドを発行すると、予期しないメッセージや、それが何であるかを理解できるメッセージが表示されることがよくあります。

以下に例を示します (このメッセージに公開したくない情報が含まれているかどうかわからないため、アドレスと本文の値を変更しましたが、値の長さは同じにして、メッセージを示します):

+CMGL: 0,"REC READ","7700000000000000000000",,"12/09/10,10:25:06+08"
0123456789ABCDEF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+CMGL: 1,"REC READ","7700000000000000000000",,"12/09/10,10:25:07+08"
000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000

OK

最初に私を驚かせたのは、addressが非常に長く、+(または開始 00) を含まないため、実際には電話番号のようには見えないことです (少なくとも、電話番号に関する私の限られた理解の範囲内では)。したがって、これは私の通信事業者からのメッセージなのだろうかと思いました。

第 2 に、メッセージの本文は 16 進数値のように見えるため、ビットのバイナリ データである可能性があります。それで、私の質問は...

これらのメッセージを解読して、実際の内容を理解する方法はありますか?

(本体をバイナリ配列にロードし、.jpg 拡張子を付けてディスクにダンプして、それが画像かどうかを確認しようとしましたが、もちろんうまくいきませんでした)。

これはおそらくパラメーター設定のように感じます-おそらくこれが当てはまるかどうかを確認するために読み取ることができるヘッダーのようなものはありますか?

4

2 に答える 2

2

はい、それらを解析することは可能です。これが16進数データであるというあなたの疑いも正しいです。これは、文字エンコーディングが原因で発生する可能性があります。

UCS-2 文字エンコーディングと、常に 16 進エンコーディングが適用される場所に関する回答を書きました。AT+CMGLそれを読むことから始めてください。次に、フォーマットの詳細について27.005<data>を読んで、 16 進数でエンコードされているかどうかを検出する方法を理解できるかどうかを確認してください。

理解できない場合、またはいずれにせよ、文字エンコーディングを"HEX"に設定して、常にデータを 16 進エンコードするように設定できますが、すべての問題が魔法のように解決されるわけではありません。受信したデータの正確な文字エンコーディングを知る必要があります。これが異なる可能性がある場合は、いつ知る必要があります...

したがって、UCS-2 を使用することは悪い考えではないかもしれません。なぜなら、受信したすべてのデータがまったく同じ形式とエンコーディングになることがわかっているからです。

于 2013-04-06T22:07:34.917 に答える
0

私はあなたの問題にどれだけ正しく対処しているかわかりませんが、あなたが受け取っているメッセージのフォーマットがあなたのモデム設定でサポートされていないのだと思います. メッセージで有効になっている形式はどれですか? テキストまたは PDU?

AT+CMGF コマンドは、サポートされているメッセージ形式を返します。AT+CMGF=1 はテキスト形式に設定します。

于 2012-09-12T11:27:13.307 に答える