Enkodér / dekodér VarInt
Desiatkové hodnoty
Výstup VarInt
Technické podrobnosti
Ako funguje VarInt enkodér / dekodér
Čo nástroj robí
Nástroj VarInt kóduje neznamienkové celé čísla ako variabilne dlhé celé čísla v štýle Protobuf LEB128 a dekóduje binárne VarInt streamy späť na zoznamy celých čísel. Každá hodnota je kódovaná do 1–10 bajtov v závislosti od svojej veľkosti, pričom najvyšší bit každého bajtu signalizuje, či nasledujú ďalšie bajty. Výstup sa zobrazuje ako pole bajtov, hexadecimálne alebo Base64 pre jednoduché vloženie do testov a fixture dát.
Bežné prípady použitia pre vývojárov
Inžinieri pri ladení payloadov vo wire formáte Protobuf používajú VarInt encode/decode na kontrolu tagov polí a hodnôt neznamienkových celočíselných polí bez spúšťania plného Protobuf runtime. Vývojári Bitcoinu a iných kryptomien parsujú dĺžky skriptov a počty transakcií kódované ako VarInt. Nástroj je užitočný aj pri reverznom inžinierstve vlastných binárnych protokolov, ktoré používajú LEB128 pre jeho kompaktnosť pri malých číslach.
Dátové formáty, typy alebo varianty
LEB128 (Little-Endian Base 128) vysiela 7 dátových bitov na bajt, pričom najvýznamnejší bit slúži ako príznak pokračovania. Malé čísla (0–127) používajú jeden bajt; čísla do 16 383 používajú dva bajty; a tak ďalej. Vstupy prijímajú desatinné čísla oddelené bielymi znakmi, čiarkami alebo novými riadkami. Výstupy sú dostupné v hexadecimálnom formáte, Base64 a v notácii surového poľa bajtov. Znamienkové celé čísla možno kódovať tak, že sa najprv aplikuje transformácia ZigZag (n << 1) ^ (n >> 31).
Bežné úskalia a okrajové prípady
Presnosť čísel v JavaScripte končí na 2^53 − 1; hodnoty nad Number.MAX_SAFE_INTEGER nie je možné bezpečne kódovať. Skrátené VarInt streamy (chýbajúci ukončovací bajt) sa dekódujú len čiastočne a vrátia chybu s uvedením offsetu. Záporné čísla nie je možné kódovať priamo — najprv použite ZigZag kódovanie. Vyhnite sa kopírovaniu VarInt bajtov zo snímok obrazovky, kde mohlo byť odstránené Base64 padding, pretože chýbajúce doplnenie mení hranice bajtov.
Kedy použiť tento nástroj vs. kód
Nástroj v prehliadači použite na rýchlu kontrolu Protobuf wire bajtov počas ladenia alebo pri písaní testov. Na produkčné kódovanie použite natívne VarInt knižnice pre daný jazyk (`varint` na npm, `binary.varint` v Go v encoding/binary, `decode_varint` v Pythone v google.protobuf.internal), ktoré v jednom volaní riešia streamovanie, obnovu po chybách a transformáciu ZigZag.