JavaでGPSモデムを構成するためのUDPパケットを作成しています。パケットのセクションの1つは電話番号であり、次の情報が提供されています。
電話番号は64ビットです。
バイト7は=0x00(ビッグエンディアン)です。
バイト4〜6 =市外局番(リトルエンディアン)。
バイト0〜3 =その他の数字(リトルエンディアン)。
私がこれまでにしたこと:
電話番号は:123 4567890バイトセクションを16進数に変換しました:123 = 0x00007B 4567890 = 0x0045B352
ByteBuffer UDPConfigModem = ByteBuffer.allocate(8);
byte areaCode1 = (0x00007B >> 8) & 0xFF;
byte areaCode2 = (0x00007B >> 16) & 0xFF;
UDPConfigModem.putInt((byte) 0x0045B352).order(ByteOrder.LITTLE_ENDIAN);
UDPConfigModem.put((byte) areaCode2).order(ByteOrder.LITTLE_ENDIAN);
UDPConfigModem.put((byte) areaCode1).order(ByteOrder.LITTLE_ENDIAN);
UDPConfigModem.put((byte) 0x00007B).order(ByteOrder.LITTLE_ENDIAN);
UDPConfigModem.put((byte) 0x00);
他の桁には4バイトが必要なので、putIntを使用してバイトを並べ替えただけなので、問題はないと確信しています。
市外局番は3バイトを必要とし、それを持っていることを知っている変数がないので、ビットシフトについて読み、「24ビット整数を3バイト配列に変換するにはどうすればよいですか?」のロジックを使用しました。それをシフトします。これが私の問題だと私が信じているところです。
バイト7は非常に簡単です。
電話番号が正しく送信されれば、モデムから応答が返されるはずですが、wire sharkで監視すると、パケットが送信されているのがわかりますが、応答が返されません。
私はあなたたちがこれについて何かエラーやより良い方法を見ることができるかどうか疑問に思っていましたか?
ありがとう。