Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

119
Vistas
conversión de matriz de bytes a 320 bits y luego extracción de bits 16 bits y luego 10 bits

Espero que algunas personas inteligentes aquí puedan ayudarme, soy nuevo en JavaScript y trato de averiguar cómo codificar lo siguiente, ya que me quedo atascado cuando la cadena de carga útil no es un grupo estándar de 8 bits y 1 byte, así que recibo 320 matriz de bits de 40 bytes. Los primeros valores están bien para extraer, ya que son 16 bits, luego 8 bits y luego 32 bits de información, pero el siguiente valor es solo 10 bits y me quedo atascado aquí. Entonces, ¿probablemente debería convertir los 40 bytes en 320 bits y luego cambiar a la derecha para cada número de bits por variable? No estoy seguro de cómo hacer esto. Este es mi formato de carga útil y entre paréntesis está el número de bits para esa variable. Cualquier ayuda sería apreciada.

https://www.iotsoundsensor.com/wp-content/uploads/2021/11/310_payload_parser_manual.html

 function Decoder(bytes, port) { //8 bit single byte values var messageinfo = bytes[2]>>[2]; var battery = bytes[2]>>[0]; var latitude = bytes[4]>>[4]; var longatude = bytes[4]>>[4]; //now have 10 bit values to decode var LAfast = bytes[15]>>>[0]; var LAslow = bytes[16]>>>[2]; return { messageinfo: messageinfo, battery: battery/10, LAfast : LAfast/10, LAslow : LAslow/10, latitude: latitude, longatude: longatude } }
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Reescribí la función Decode() en función del código JavaScript en iot-source (que es realmente la biblia para decodificar estos mensajes).

Creé una función getField() para decodificar campos en un desplazamiento, longitud y resolución determinados y también una función getBits() para recuperar una matriz de bits para su posterior decodificación (utilizada para los campos LAxxx).

He usado el ejemplo de la página anterior como entrada para Decode():

 function hexToByteArray(hex) { return Array.from({ length: hex.length/2}, (v,n) => parseInt(hex.slice(n * 2, n*2 + 2), 16)); } function getField(offset, length, bytes, resolution = 1) { return bytesToNum(bytes.slice(offset, offset + length)) * resolution; } function bytesToNum(bytes) { return bytes.reduce((acc, b, x) => acc | (b << (x * 8)), 0); } // Convert a byte segment to bits function getBits(offset, length, bytes) { return bytes.slice(offset, offset + length).map((byt) => { return Array.from({ length: 8 }).map((x, i) => { return ((byt * (2 ** i) & 0x80) !== 0 ? 1 : 0); }); }, []).flat(); } function parseBits(bits) { return bits.reduce((acc, b, i) => { return acc + 0.1*(bits[bits.length - 1 - i] ? 2**(i): 0); }, 30); } function Decoder(bytes, port) { let offset = 0; let messageinfo = getField(offset, 2, bytes, 1); let battery = getField(offset += 2, 1, bytes, 0.1); // NB: We should check messageinfo to ensure these are actually present... let latitude = getField(offset += 1, 4, bytes, 1e-7); let longitude = getField(offset += 4, 4, bytes, 1e-7); // Skip parsing timestamp for now... offset += 4 let bitArray = getBits(offset += 4, 20, bytes); let bitIndex = 0; let LAfast = parseBits(bitArray.slice(bitIndex, bitIndex += 10)); let LAslow = parseBits(bitArray.slice(bitIndex, bitIndex += 10)); let LCfast = parseBits(bitArray.slice(bitIndex, bitIndex += 10)); let LCslow = parseBits(bitArray.slice(bitIndex, bitIndex += 10)); return { messageinfo, battery, LAfast, LAslow, LCfast, LCslow, latitude, longitude } } let bytes = (hexToByteArray('7FFF3F6599341FE38C11036A608C60370DA561584699336CDB55CDB390F44BD4B5B9D5390E34BCE3')) console.log(Decoder(bytes))
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda