VarInt enkodér / dekodér
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.