Decodificador de MessagePack
MessagePack es lo que elige un servicio cuando JSON resulta demasiado grande y protobuf demasiada ceremonia: los mismos valores, empaquetados en bytes. Esa compacidad es justo el problema cuando algo falla, porque una carga sacada de una caché, una cola o un registro es ilegible sin decodificarla. Esta herramienta lee el formato entero y conserva las distinciones que JSON perdería. Los enteros vuelven con el ancho con que se escribieron, y un valor de 64 bits que no cabe en un número de JavaScript se mantiene como cadena en lugar de redondearse en silencio. Los binarios siguen siendo binarios en vez de convertirse en texto estropeado: la separación entre str y bin llegó después de que el formato se publicara, y confundirlos es exactamente como un decodificador corrompe datos. Los tipos de extensión se indican con su número, y la extensión de marca de tiempo se decodifica bien en sus tres codificaciones. El resultado se muestra como árbol con el tipo de cada valor y como JSON, con lo que JSON no puede expresar escrito explícitamente en vez de aplanado. Si la entrada tiene más bytes de los que necesita un valor —que es como se ve un flujo de mensajes concatenados— dice cuántos sobran en lugar de fingir que no están. No se sube nada.
Pega una carga MessagePack en base64 o hex para decodificarla.
Cómo usar
- Pega la carga en base64 o hex: el formato se detecta y puedes forzarlo.
- Lee el árbol: cada fila muestra la clave, el tipo MessagePack y el valor.
- Copia el JSON cuando quieras procesar los valores en otro sitio.
- Suelta un archivo binario para decodificar una carga capturada.
- Mira el aviso de bytes sobrantes si la carga es un flujo de varios mensajes.
Preguntas frecuentes
- ¿Qué diferencia hay entre str y bin?
- MessagePack tenía originalmente un único tipo raw usado para texto y para bytes. La revisión de 2013 lo separó en str para texto UTF-8 y bin para bytes arbitrarios, porque de otro modo un decodificador no puede saber si debe interpretar los bytes como texto. Tratar un bin como cadena es como se corrompen los datos binarios, así que aquí se mantienen separados.
- ¿Por qué un entero grande sale como cadena en el JSON?
- Un número de JavaScript solo guarda enteros exactos hasta 2^53. MessagePack maneja enteros de 64 bits completos, así que lo que pasa de ese límite se escribe como cadena en la salida JSON: perder los dígitos en silencio sería peor que la molestia.
- ¿Cómo se decodifican las marcas de tiempo?
- La extensión de marca de tiempo, tipo -1, tiene tres codificaciones: cuatro bytes de segundos, doce bytes de nanosegundos y segundos, y una forma de ocho bytes que mete treinta bits de nanosegundos encima de treinta y cuatro de segundos en una sola palabra. Esa última es la trampa: leída como entero normal da una fecha decenas de miles de años desviada.
- ¿Qué significa el aviso de bytes sobrantes?
- Los valores de MessagePack se autodelimitan, así que varios pueden ir seguidos en un mismo búfer. Cuando el primero termina antes que la entrada, el resto suele ser otro mensaje. El recuento te dice cuánto queda en vez de ignorarlo.
- ¿Y los tipos de extensión que no son marcas de tiempo?
- Se muestran con su número de tipo y su contenido en base64. El significado de una extensión lo define la aplicación que la escribió, así que no hay nada genérico en lo que decodificarla.
- ¿Se sube mi carga?
- No. Los bytes se decodifican en tu navegador y no se envía nada a ningún servidor.
Herramientas relacionadas
Visor de plist (binario y XML)
Abre una lista de propiedades de Apple —binaria o XML— y léela como árbol, o conviértela a JSON o a plist XML.
Decodificador de Protobuf (sin .proto)
Pega bytes protobuf en base64 o hex y lee los campos —números, tipos de wire, mensajes anidados, cadenas y arrays packed— sin necesidad de un esquema.
Decodificador JWT
Decodifica un JSON Web Token para ver su cabecera, claims y expiración.
Visor Hex Dump
Inspecciona texto o un archivo pequeño como offset + bytes hex + ASCII imprimible, como `xxd` o `hexdump -C`.
Calculadora Bit a Bit
AND, OR, XOR, NOT y desplazamientos sobre dos enteros — en binario, hex, decimal sin signo y con signo, con ancho de 8, 16, 32 o 64 bits.
Tabla de Códigos ASCII
Explora y busca las 256 filas de ASCII / ASCII extendido — decimal, hexadecimal, octal, binario y nombres de caracteres de control.