DevToys Web Pro iconDevToys Web ProBlog
Ohodnoťte nás:
Vyzkoušejte rozšíření pro prohlížeč:

VarInt enkodér / dekodér

12 bajty
Režim

Desetinné hodnoty

  • Výstup VarInt

  • Technické detaily

    Jak funguje enkodér / dekodér VarInt

    Co nástroj dělá

    Nástroj VarInt kóduje neznaménková celá čísla jako proměnně dlouhá celá čísla ve stylu Protobuf LEB128 a dekóduje binární streamy VarInt zpět na seznamy celých čísel. Každá hodnota je zakódována do 1–10 bajtů podle své velikosti, přičemž nejvyšší bit každého bajtu signalizuje, zda následují další bajty. Výstup se zobrazuje jako pole bajtů, hexadecimálně nebo v Base64 pro snadné vložení do testů a fixture.

    Běžné případy použití pro vývojáře

    Inženýři ladící payloady ve wire formátu Protobuf používají VarInt encode/decode k inspekci tagů polí a hodnot neznaménkových celočíselných polí bez spouštění plného Protobuf runtime. Vývojáři Bitcoinu a dalších kryptoměn parsují délky skriptů a počty transakcí kódované jako VarInt. Nástroj je užitečný i při reverzním inženýrství vlastních binárních protokolů, které přebírají LEB128 kvůli jeho kompaktnosti pro malá čísla.

    Datové formáty, typy nebo varianty

    LEB128 (Little-Endian Base 128) vysílá 7 datových bitů na bajt, přičemž nejvýznamnější bit funguje jako příznak pokračování. Malá čísla (0–127) používají jeden bajt; čísla až do 16 383 používají dva bajty; a tak dále. Vstupy přijímají desetinná čísla oddělená mezerami, čárkami nebo novými řádky. Výstupy jsou k dispozici v hexadecimálním formátu, Base64 a v notaci surového pole bajtů. Znaménková celá čísla lze kódovat tak, že se nejprve aplikuje transformace ZigZag (n << 1) ^ (n >> 31).

    Běžné nástrahy a okrajové případy

    Přesnost čísel v JavaScriptu končí na 2^53 − 1; hodnoty nad Number.MAX_SAFE_INTEGER nelze bezpečně kódovat. Zkrácené streamy VarInt (chybějící ukončovací bajt) se dekódují jen částečně a vrátí chybu s uvedením offsetu. Záporná čísla nelze kódovat přímo — nejprve použijte kódování ZigZag. Vyhněte se kopírování bajtů VarInt ze screenshotů, kde mohlo být odstraněno Base64 zarovnání (padding), protože chybějící padding mění hranice bajtů.

    Kdy použít tento nástroj vs. kód

    Použijte nástroj v prohlížeči pro rychlou kontrolu Protobuf wire bajtů při ladění nebo při psaní testů. Pro produkční kódování použijte nativní VarInt knihovny pro daný jazyk (`varint` na npm, `binary.varint` v Go v encoding/binary, `decode_varint` v Pythonu v google.protobuf.internal), které v jednom volání řeší streamování, zotavení z chyb a transformaci ZigZag.