DevToys Web Pro iconDevToys Web ProБлог
Оценете ни:
Изпробвайте разширението за браузър:

VarInt енкодер / декодер

12 байта
Режим

Десетични стойности

  • Изход на VarInt

  • Технически подробности

    Как работи VarInt енкодерът / декодерът

    Какво прави инструментът

    Инструментът VarInt кодира беззнакови цели числа като LEB128 цели числа с променлива дължина в стил Protobuf и декодира двоични VarInt потоци обратно до списъци от цели числа. Всяка стойност се кодира в 1–10 байта в зависимост от големината ѝ, като най-старшият бит на всеки байт указва дали следват още байтове. Изходът се показва като масив от байтове, шестнадесетичен низ или Base64 за лесно вграждане в тестове и фикстури.

    Често срещани случаи на употреба от разработчици

    Инженери, които дебъгват payload-и във wire-format на Protobuf, използват VarInt encode/decode, за да инспектират тагове на полета и стойности на беззнакови целочислени полета, без да стартират пълна Protobuf среда за изпълнение. Разработчици на Bitcoin и други криптовалути парсват дължини на скриптове и брой транзакции, кодирани като VarInt. Инструментът е полезен и при обратно инженерство на персонализирани двоични протоколи, които използват LEB128 заради компактността му при малки числа.

    Формати на данни, типове или варианти

    LEB128 (Little-Endian Base 128) извежда 7 полезни бита на байт, като най-значимият бит служи като флаг за продължение. Малките числа (0–127) използват един байт; числа до 16 383 използват два байта; и т.н. Входът приема десетични числа, разделени с интервали, запетаи или нови редове. Изходът е наличен в шестнадесетичен формат, Base64 и нотация на суров масив от байтове. Знаковите цели числа могат да се кодират, като първо се приложи ZigZag трансформация (n << 1) ^ (n >> 31).

    Често срещани капани и гранични случаи

    Точността на числата в JavaScript достига максимум 2^53 − 1; стойности над Number.MAX_SAFE_INTEGER не могат да се кодират безопасно. Съкратени VarInt потоци (липсващ терминиращ байт) се декодират частично и връщат грешка, указваща отместването. Отрицателни числа не могат да се кодират директно — първо използвайте ZigZag кодиране. Избягвайте да копирате VarInt байтове от скрийншоти, където Base64 padding може да е премахнат, тъй като липсващият padding променя границите между байтовете.

    Кога да използвате този инструмент вместо код

    Използвайте браузърния инструмент за бърза проверка на Protobuf wire байтове по време на дебъгване или при писане на тестове. За продукционно кодиране използвайте VarInt библиотеки, специфични за езика (`varint` в npm, `binary.varint` в encoding/binary на Go, `decode_varint` в google.protobuf.internal на Python), които обработват стрийминг, възстановяване при грешки и ZigZag трансформация с едно извикване.