VarInt-enkoder / -dekoder
Desimalverdier
VarInt-utdata
Tekniske detaljer
Slik fungerer VarInt-koder / -dekoder
Hva verktøyet gjør
VarInt-verktøyet koder usignerte heltall som Protobuf-lignende LEB128-variabel-lengde-heltall og dekoder binære VarInt-strømmer tilbake til heltallslister. Hver verdi kodes i 1–10 byte avhengig av størrelsen, der høybiten i hver byte signaliserer om flere byte følger. Utdata vises som en byte-array, heksadesimal eller Base64 for enkel innbygging i tester og fixtures.
Vanlige bruksområder for utviklere
Ingeniører som feilsøker Protobuf wire-format-payloads bruker VarInt-koding/dekoding for å inspisere felttagger og usignerte heltallsfeltverdier uten å starte opp et fullverdig Protobuf-runtime. Bitcoin- og andre kryptovaluta-utviklere parser VarInt-kodede skriptlengder og transaksjonsantall. Verktøyet er også nyttig ved reverse engineering av egendefinerte binærprotokoller som tar i bruk LEB128 på grunn av kompaktheten for små tall.
Dataformater, typer eller varianter
LEB128 (Little-Endian Base 128) sender ut 7 nyttelastbiter per byte, der den mest signifikante biten fungerer som et fortsettelsesflagg. Små tall (0–127) bruker én byte; tall opp til 16 383 bruker to byte; og så videre. Inndata godtar desimaltall separert med mellomrom, komma eller linjeskift. Utdata er tilgjengelig i heksadesimal, Base64 og rå byte-array-notasjon. Signerte heltall kan kodes ved først å bruke ZigZag-transformasjon (n << 1) ^ (n >> 31).
Vanlige fallgruver og kanttilfeller
JavaScript-tallpresisjon stopper ved 2^53 − 1; verdier over Number.MAX_SAFE_INTEGER kan ikke kodes trygt. Avkuttede VarInt-strømmer (manglende terminatorbyte) dekodes delvis og returnerer en feil som angir offset. Negative tall kan ikke kodes direkte — bruk ZigZag-koding først. Unngå å kopiere VarInt-byte fra skjermbilder der Base64-padding kan ha blitt fjernet, siden manglende padding endrer byte-grenser.
Når du bør bruke dette verktøyet vs. kode
Bruk nettleserverktøyet for rask inspeksjon av Protobuf wire-byte under feilsøking eller mens du skriver tester. For produksjonskoding, bruk språk-native VarInt-biblioteker (`varint` på npm, `binary.varint` i Go sitt encoding/binary, `decode_varint` i Python sitt google.protobuf.internal) som håndterer strømming, feilrestitusjon og ZigZag-transformasjon i ett enkelt kall.