DevToys Web Pro iconDevToys Web ProBlog
Bedøm os:
Prøv browserudvidelsen:

VarInt-enkoder / -dekoder

12 bytes
Tilstand

Decimale værdier

  • VarInt-output

  • Tekniske detaljer

    Sådan fungerer VarInt-enkoderen / -dekoderen

    Hvad værktøjet gør

    VarInt-værktøjet enkoder usignerede heltal som Protobuf-lignende LEB128-heltal med variabel længde og dekoder binære VarInt-streams tilbage til heltalslister. Hver værdi enkodes i 1–10 bytes afhængigt af størrelsen, hvor den høje bit i hver byte angiver, om der følger flere bytes. Output vises som et byte-array, hexadecimalt eller Base64 for nem indlejring i tests og fixtures.

    Almindelige anvendelsestilfælde for udviklere

    Ingeniører, der fejlsøger Protobuf wire-format-payloads, bruger VarInt encode/decode til at inspicere felttags og usignerede heltalsfelters værdier uden at starte en fuld Protobuf-runtime. Bitcoin- og andre kryptovalutaudviklere parser VarInt-enkodede scriptlængder og transaktionsantal. Værktøjet er også nyttigt ved reverse engineering af brugerdefinerede binære protokoller, der anvender LEB128 på grund af dets kompakthed for små tal.

    Dataformater, typer eller varianter

    LEB128 (Little-Endian Base 128) udsender 7 payload-bits pr. byte, hvor den mest signifikante bit fungerer som et fortsættelsesflag. Små tal (0–127) bruger en enkelt byte; tal op til 16.383 bruger to bytes; og så videre. Input accepterer decimaltal adskilt af mellemrum, kommaer eller linjeskift. Output er tilgængeligt i hexadecimalt, Base64 og rå byte-array-notation. Fortegnede heltal kan enkodes ved først at anvende ZigZag-transformation (n << 1) ^ (n >> 31).

    Almindelige faldgruber og kanttilfælde

    JavaScripts talpræcision topper ved 2^53 − 1; værdier over Number.MAX_SAFE_INTEGER kan ikke enkodes sikkert. Afkortede VarInt-streams (manglende terminator-byte) dekoder delvist og returnerer en fejl, der angiver offset. Negative tal kan ikke enkodes direkte — brug ZigZag-enkodning først. Undgå at kopiere VarInt-bytes fra skærmbilleder, hvor Base64-padding kan være fjernet, da manglende padding ændrer bytegrænser.

    Hvornår du skal bruge dette værktøj vs. kode

    Brug browserværktøjet til hurtig inspektion af Protobuf wire-bytes under fejlfinding eller mens du skriver tests. Til produktionenkodning bør du bruge sprog-native VarInt-biblioteker (`varint` på npm, `binary.varint` i Go's encoding/binary, `decode_varint` i Python's google.protobuf.internal), som håndterer streaming, fejlgenopretning og ZigZag-transformation i ét kald.