DevToys Web Pro iconDevToys Web ProБлог
Ocenite nas:
Isprobajte ekstenziju za pregledač:

VarInt enkoder / dekoder

12 bajtovi
Režim

Decimalne vrednosti

  • VarInt izlaz

  • Tehnički detalji

    Kako radi VarInt enkoder / dekoder

    Šta alat radi

    VarInt alat enkodira neoznačene cele brojeve kao Protobuf-stil LEB128 varijabilne cele brojeve promenljive dužine i dekodira binarne VarInt tokove nazad u liste celih brojeva. Svaka vrednost se enkodira u 1–10 bajtova u zavisnosti od veličine, pri čemu visoki bit svakog bajta signalizira da li slede dodatni bajtovi. Izlaz se prikazuje kao niz bajtova, heksadecimalno ili Base64 radi lakog ugrađivanja u testove i fixture-e.

    Uobičajeni slučajevi upotrebe za programere

    Inženjeri koji debaguju Protobuf payload-e u wire-formatu koriste VarInt enkodiranje/dekodiranje da pregledaju tagove polja i vrednosti neoznačenih celobrojnih polja bez pokretanja kompletnog Protobuf runtime-a. Bitcoin i drugi programeri kriptovaluta parsiraju VarInt-enkodirane dužine skripti i brojeve transakcija. Alat je takođe koristan pri reverznom inženjeringu prilagođenih binarnih protokola koji usvajaju LEB128 zbog njegove kompaktnosti za male brojeve.

    Formati podataka, tipovi ili varijante

    LEB128 (Little-Endian Base 128) emituje 7 bitova korisnog sadržaja po bajtu, pri čemu najznačajniji bit služi kao zastavica nastavka. Mali brojevi (0–127) koriste jedan bajt; brojevi do 16.383 koriste dva bajta; i tako dalje. Ulazi prihvataju decimalne brojeve razdvojene razmacima, zarezima ili novim redovima. Izlazi su dostupni u heksadecimalnom obliku, Base64 i notaciji sirovog niza bajtova. Potpisani celi brojevi mogu se enkodirati tako što se prvo primeni ZigZag transformacija (n << 1) ^ (n >> 31).

    Uobičajene greške i rubni slučajevi

    Preciznost JavaScript brojeva ide do 2^53 − 1; vrednosti iznad Number.MAX_SAFE_INTEGER ne mogu se bezbedno enkodirati. Skraćeni VarInt tokovi (bez terminatorskog bajta) dekodiraju se delimično i vraćaju grešku koja ukazuje na offset. Negativni brojevi ne mogu se direktno enkodirati — prvo koristite ZigZag enkodiranje. Izbegavajte kopiranje VarInt bajtova sa snimaka ekrana gde je Base64 padding možda uklonjen, jer nedostajući padding menja granice bajtova.

    Kada koristiti ovaj alat umesto koda

    Koristite alat u pregledaču za brzu inspekciju Protobuf wire bajtova tokom debagovanja ili pisanja testova. Za produkciono enkodiranje, koristite biblioteke VarInt specifične za jezik (`varint` na npm-u, `binary.varint` u Go-ovom encoding/binary, `decode_varint` u Python-ovom google.protobuf.internal) koje u jednom pozivu pokrivaju strimovanje, oporavak od grešaka i ZigZag transformaciju.