Отправка номера телефона с 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 и поместить байты один за другим (не должно быть никаких причин использовать приведение).