DevToys Web Pro iconDevToys Web ProBlogg
Betygsätt oss:
Prova webbläsartillägget:

VarInt-kodare / avkodare

12 byte
Läge

Decimala värden

  • VarInt-utdata

  • Tekniska detaljer

    Så fungerar VarInt-kodaren / -avkodaren

    Vad verktyget gör

    VarInt-verktyget kodar osignerade heltal som Protobuf-liknande LEB128-heltal med variabel längd och avkodar binära VarInt-strömmar tillbaka till heltalslistor. Varje värde kodas i 1–10 byte beroende på storlek, där den högsta biten i varje byte signalerar om fler byte följer. Utdata visas som en byte-array, hexadecimalt eller Base64 för enkel inbäddning i tester och fixtures.

    Vanliga användningsfall för utvecklare

    Ingenjörer som felsöker Protobuf-payloads i wire-format använder VarInt-kodning/avkodning för att inspektera fälttaggar och osignerade heltalsfält utan att starta en full Protobuf-runtime. Bitcoin- och andra kryptovalutautvecklare tolkar VarInt-kodade skriptlängder och transaktionsantal. Verktyget är också hjälpsamt vid reverse engineering av egna binära protokoll som använder LEB128 tack vare dess kompakthet för små tal.

    Dataformat, typer eller varianter

    LEB128 (Little-Endian Base 128) avger 7 nyttobitar per byte, där den mest signifikanta biten fungerar som fortsättningsflagga. Små tal (0–127) använder en enda byte; tal upp till 16 383 använder två byte; och så vidare. Indata accepterar decimaltal separerade med blanksteg, kommatecken eller radbrytningar. Utdata finns i hexadecimalt, Base64 och rå byte-array-notation. Signerade heltal kan kodas genom att först tillämpa ZigZag-transformering (n << 1) ^ (n >> 31).

    Vanliga fallgropar och specialfall

    JavaScripts talprecision går upp till 2^53 − 1; värden över Number.MAX_SAFE_INTEGER kan inte kodas säkert. Avkortade VarInt-strömmar (saknar terminerande byte) avkodas delvis och returnerar ett fel som anger offset. Negativa tal kan inte kodas direkt — använd ZigZag-kodning först. Undvik att kopiera VarInt-byte från skärmbilder där Base64-padding kan ha tagits bort, eftersom saknad padding ändrar bytegränser.

    När du ska använda det här verktyget jämfört med kod

    Använd webbläsarverktyget för snabb inspektion av Protobuf-wire-byte vid felsökning eller när du skriver tester. För produktionskodning, använd språkets inbyggda VarInt-bibliotek (`varint` på npm, `binary.varint` i Go:s encoding/binary, `decode_varint` i Python:s google.protobuf.internal) som hanterar strömning, felåterhämtning och ZigZag-transformering i ett enda anrop.