Я работаю над кодировщиком для LoRaWAN с JavaScript. Я получаю это поле данных:
{“header”: 6,“sunrise”: -30,“sunset”: 30,“lat”: 65.500226,“long”: 24.833547}
И мне нужно закодировать шестнадцатеричное сообщение, мой код:
var header = byteToHex(object.header);
var sunrise =byteToHex(object.sunrise);
var sunset = byteToHex(object.sunset);
var la = parseInt(object.lat100,10);
var lat = swap16(la);
var lo = parseInt(object.long100,10);
var lon = swap16(lo);
var message={};
if (object.header === 6){
message = (lon)|(lat<<8);
bytes = message;
}
return hexToBytes(bytes.toString(16));
Функции byteToHex/swap16 определены как:
function byteToHex(byte) {
var unsignedByte = byte & 0xff;
if (unsignedByte < 16) {
return ‘0’ + unsignedByte.toString(16);
} else {
return unsignedByte.toString(16);
}
}
function swap16(val) {
return ((val & 0xFF) << 8) | ((val >> 8) & 0xFF);
}
Тестирование с возвратным сообщением = lon дает B3 09 в шестнадцатеричном формате. Тестирование с сообщением = lon | lat ‹‹8 return 96 BB 09, но результат, который я ищу, это 96 19 B3 09 (составляя lon + lat).
Какие-нибудь советы? Что я делаю неправильно?
lon
иlat
являются 16-битными числами, вы потеряете информацию с(lon)|(lat<<8)
. Вы имели в видуlon|(lat<<16)
? - person trincot   schedule 25.09.2019