VarInt enkoder / dekoder
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.