Отправка номера телефона с UDP-пакетом в битовом порядке Java

Я создаю пакет UDP для настройки модема GPS в Java. Одним из разделов пакета является номер телефона, и мне дали следующую информацию:

Номер телефона 64 бита.

Байт 7 = 0x00 (старший порядковый номер).

Байты 4-6 = код города (с прямым порядком байтов).

Байты 0-3 = другие цифры (младший порядок).

Что я сделал до сих пор:

Номер телефона: 123 4567890 Я преобразовал байтовые секции в шестнадцатеричные: 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 довольно прямой.

Я должен получить ответ от модема, если номер телефона отправлен правильно, но при мониторинге его на проводной акуле я вижу отправку пакета, но ответ не отправляется обратно.

Мне было интересно, видите ли вы, ребята, какие-либо ошибки или лучшие способы сделать это?

Благодарю.

1 ответ

Решение

Ваш код сбивает с толку. Байт не является маленьким или старшим порядком байтов. Порядковый номер применяется только к последовательности байтов, представляющих большее число, таких как целое число. .order на ByteBuffer заменяет весь буфер, что не то, что вы хотите.

putInt((byte) 0x0045B352) не сработает - вы, вероятно, просто получите младший байт этого целого числа. Я предлагаю вам использовать этот ответ /questions/22098449/kak-mne-preobrazovat-24-bitnoe-tseloe-v-3-bajtovyij-massiv/22098457#22098457 и поместить байты один за другим (не должно быть никаких причин использовать приведение).

Другие вопросы по тегам