VarInt kodētājs / dekodētājs
Decimālās vērtības
VarInt izvade
Tehniskā informācija
Kā darbojas VarInt kodētājs / dekodētājs
Ko rīks dara
VarInt rīks kodē neparakstītus veselus skaitļus kā Protobuf stila LEB128 mainīga garuma veselus skaitļus un dekodē bināras VarInt plūsmas atpakaļ uz veselu skaitļu sarakstiem. Katrs lielums tiek kodēts 1–10 baitos atkarībā no tā lieluma, un katra baita augstākais bits norāda, vai seko vēl baiti. Izvade tiek parādīta kā baitu masīvs, heksadecimāli vai Base64, lai to būtu viegli iegult testos un fiksētajos datos.
Biežākie izstrādātāju lietošanas gadījumi
Inženieri, kas atkļūdo Protobuf wire-format slodzes, izmanto VarInt kodēšanu/dekodēšanu, lai pārbaudītu lauku tagus un neparakstītu veselo skaitļu lauku vērtības, nepalaižot pilnu Protobuf izpildlaiku. Bitcoin un citu kriptovalūtu izstrādātāji parsē VarInt kodētus skriptu garumus un transakciju skaitus. Rīks ir noderīgs arī, veicot reverso inženieriju pielāgotiem bināriem protokoliem, kas izmanto LEB128 tā kompaktuma dēļ maziem skaitļiem.
Datu formāti, tipi vai varianti
LEB128 (Little-Endian Base 128) katrā baitā izvada 7 datu bitus, bet visnozīmīgākais bits darbojas kā turpinājuma karodziņš. Mazi skaitļi (0–127) izmanto vienu baitu; skaitļi līdz 16 383 izmanto divus baitus; un tā tālāk. Ievade pieņem decimālus skaitļus, kas atdalīti ar atstarpēm, komatiem vai jaunām rindām. Izvade ir pieejama heksadecimālā, Base64 un neapstrādāta baitu masīva notācijā. Parakstītus veselus skaitļus var kodēt, vispirms pielietojot ZigZag transformāciju (n << 1) ^ (n >> 31).
Biežākās kļūdas un robežgadījumi
JavaScript skaitļu precizitāte beidzas pie 2^53 − 1; vērtības virs Number.MAX_SAFE_INTEGER nevar droši kodēt. Saīsinātas VarInt plūsmas (trūkst terminatora baita) dekodējas daļēji un atgriež kļūdu, norādot nobīdi. Negatīvus skaitļus nevar kodēt tieši — vispirms izmantojiet ZigZag kodēšanu. Izvairieties kopēt VarInt baitus no ekrānuzņēmumiem, kuros Base64 aizpildījums var būt noņemts, jo trūkstošs aizpildījums maina baitu robežas.
Kad izmantot šo rīku, nevis kodu
Izmantojiet pārlūka rīku ātrai Protobuf wire baitu pārbaudei atkļūdošanas laikā vai rakstot testus. Ražošanas kodēšanai izmantojiet valodai raksturīgās VarInt bibliotēkas (`varint` npm, `binary.varint` Go encoding/binary, `decode_varint` Python google.protobuf.internal), kas vienā izsaukumā apstrādā straumēšanu, kļūdu atkopšanu un ZigZag transformāciju.