VarInt enkoder / dekoder
Decimalne vrednosti
Izhod VarInt
Tehnične podrobnosti
Kako deluje kodirnik / dekodirnik VarInt
Kaj orodje počne
Orodje VarInt kodira nepredznačena cela števila kot spremenljivo dolga cela števila v slogu Protobuf LEB128 in dekodira binarne tokove VarInt nazaj v sezname celih števil. Vsaka vrednost je kodirana v 1–10 bajtih, odvisno od njene velikosti, pri čemer najvišji bit vsakega bajta označuje, ali sledijo še bajti. Izhod je prikazan kot bajtno polje, šestnajstiško ali Base64 za enostavno vdelavo v teste in testne podatke.
Pogosti primeri uporabe za razvijalce
Inženirji, ki odpravljajo napake v Protobuf payloadih v žičnem formatu, uporabljajo kodiranje/dekodiranje VarInt za pregled oznak polj in vrednosti nepredznačenih celoštevilskih polj brez zagona celotnega Protobuf okolja. Razvijalci Bitcoina in drugih kriptovalut razčlenjujejo dolžine skript, kodirane z VarInt, in števila transakcij. Orodje je uporabno tudi pri povratnem inženiringu prilagojenih binarnih protokolov, ki uporabljajo LEB128 zaradi njegove kompaktnosti pri majhnih številih.
Podatkovni formati, tipi ali različice
LEB128 (Little-Endian Base 128) odda 7 podatkovnih bitov na bajt, pri čemer najpomembnejši bit deluje kot zastavica nadaljevanja. Majhna števila (0–127) uporabljajo en bajt; števila do 16.383 uporabljajo dva bajta; in tako naprej. Vhodi sprejemajo decimalna števila, ločena s presledki, vejicami ali novimi vrsticami. Izhodi so na voljo v šestnajstiškem zapisu, Base64 in zapisu surovega bajtnega polja. Predznačena cela števila je mogoče kodirati tako, da najprej uporabite ZigZag transformacijo (n << 1) ^ (n >> 31).
Pogoste pasti in robni primeri
Natančnost števil v JavaScriptu se konča pri 2^53 − 1; vrednosti nad Number.MAX_SAFE_INTEGER ni mogoče varno kodirati. Okrajšani tokovi VarInt (manjkajoč zaključni bajt) se dekodirajo delno in vrnejo napako, ki označuje odmik. Negativnih števil ni mogoče kodirati neposredno — najprej uporabite ZigZag kodiranje. Izogibajte se kopiranju bajtov VarInt iz posnetkov zaslona, kjer je bilo morda odstranjeno Base64 polnilo, saj manjkajoče polnilo spremeni meje bajtov.
Kdaj uporabiti to orodje namesto kode
Orodje v brskalniku uporabite za hiter pregled Protobuf žičnih bajtov med odpravljanjem napak ali pisanjem testov. Za produkcijsko kodiranje uporabite knjižnice VarInt, značilne za jezik (`varint` na npm, `binary.varint` v Go-jevem encoding/binary, `decode_varint` v Pythonovem google.protobuf.internal), ki v enem klicu obravnavajo pretakanje, obnovitev po napakah in ZigZag transformacijo.