VarInt enkoder / dekoder
Decimalne vrijednosti
VarInt izlaz
Tehnički detalji
Kako radi VarInt koder / dekoder
Što alat radi
VarInt alat kodira nepredznačene cijele brojeve kao Protobuf-stil LEB128 varijabilno-duge cijele brojeve i dekodira binarne VarInt tokove natrag u popise cijelih brojeva. Svaka se vrijednost kodira u 1–10 bajtova ovisno o veličini, pri čemu visoki bit svakog bajta označava slijede li još bajtovi. Izlaz se prikazuje kao niz bajtova, heksadecimalno ili Base64 radi lakšeg umetanja u testove i fixturee.
Uobičajeni slučajevi upotrebe za razvojne programere
Inženjeri koji otklanjaju pogreške u Protobuf payloadovima u wire-formatu koriste VarInt kodiranje/dekodiranje kako bi pregledali oznake polja i vrijednosti nepredznačenih cjelobrojnih polja bez pokretanja cijelog Protobuf runtimea. Bitcoin i drugi kripto programeri parsiraju VarInt-kodirane duljine skripti i brojeve transakcija. Alat je također koristan pri reverznom inženjeringu prilagođenih binarnih protokola koji usvajaju LEB128 zbog njegove kompaktnosti za male brojeve.
Formati podataka, vrste ili varijante
LEB128 (Little-Endian Base 128) emitira 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 prihvaćaju decimalne brojeve odvojene razmacima, zarezima ili novim redovima. Izlazi su dostupni u heksadecimalnom obliku, Base64 i notaciji sirovog niza bajtova. Predznačeni cijeli brojevi mogu se kodirati tako da se najprije primijeni ZigZag transformacija (n << 1) ^ (n >> 31).
Uobičajene zamke i rubni slučajevi
Preciznost JavaScript brojeva završava na 2^53 − 1; vrijednosti iznad Number.MAX_SAFE_INTEGER ne mogu se sigurno kodirati. Skraćeni VarInt tokovi (bez završnog bajta) dekodiraju se djelomično i vraćaju pogrešku koja navodi pomak. Negativni brojevi ne mogu se izravno kodirati — najprije koristite ZigZag kodiranje. Izbjegavajte kopiranje VarInt bajtova iz snimki zaslona gdje je Base64 padding možda uklonjen, jer nedostajući padding mijenja granice bajtova.
Kada koristiti ovaj alat umjesto koda
Koristite alat u pregledniku za brzi pregled Protobuf wire bajtova tijekom otklanjanja pogrešaka ili pri pisanju testova. Za produkcijsko kodiranje koristite VarInt biblioteke specifične za jezik (`varint` na npm-u, `binary.varint` u Go-ovom encoding/binary, `decode_varint` u Pythonovom google.protobuf.internal) koje u jednom pozivu obrađuju streaming, oporavak od pogrešaka i ZigZag transformaciju.