VarInt-enkooderi / -dekooderi
Desimaaliarvot
VarInt-tulos
Tekniset tiedot
Miten VarInt-kooderi / -dekooderi toimii
Mitä työkalu tekee
VarInt-työkalu koodaa etumerkittömät kokonaisluvut Protobuf-tyylisinä LEB128-muuttuvapituuksisina kokonaislukuina ja dekoodaa binääriset VarInt-virrat takaisin kokonaislukulistoiksi. Jokainen arvo koodataan 1–10 tavuun suuruusluokasta riippuen, ja jokaisen tavun ylin bitti kertoo, seuraako lisää tavuja. Tuloste näytetään tavutaulukkona, heksana tai Base64-muodossa, jotta se on helppo upottaa testeihin ja fixtureihin.
Yleiset kehittäjien käyttötapaukset
Protobufin wire-format -kuormia debuggaavat insinöörit käyttävät VarInt-koodausta/dekoodausta tarkastaakseen kenttätagit ja etumerkittömien kokonaislukukenttien arvot ilman, että tarvitsee käynnistää koko Protobuf-ajonaika. Bitcoin- ja muut kryptovaluuttakehittäjät jäsentävät VarInt-koodattuja skriptien pituuksia ja transaktiomääriä. Työkalu on hyödyllinen myös käänteismallinnettaessa mukautettuja binääriprotokollia, jotka käyttävät LEB128:aa sen tiiviyden vuoksi pienille luvuille.
Tietomuodot, tyypit tai variantit
LEB128 (Little-Endian Base 128) tuottaa 7 hyötybittiä per tavu, ja merkitsevin bitti toimii jatkolippuna. Pienet luvut (0–127) käyttävät yhden tavun; luvut 16 383:een asti käyttävät kaksi tavua; ja niin edelleen. Syötteet hyväksyvät desimaalilukuja, jotka on erotettu välilyönneillä, pilkuilla tai rivinvaihdoilla. Tulosteet ovat saatavilla heksana, Base64-muodossa ja raakana tavutaulukkomerkintänä. Etumerkilliset kokonaisluvut voidaan koodata soveltamalla ensin ZigZag-muunnosta (n << 1) ^ (n >> 31).
Yleiset sudenkuopat ja reunatapaukset
JavaScriptin lukutarkkuus yltää arvoon 2^53 − 1; Number.MAX_SAFE_INTEGER:n ylittäviä arvoja ei voi koodata turvallisesti. Katkaistut VarInt-virrat (puuttuva päättävä tavu) dekoodautuvat osittain ja palauttavat virheen, joka ilmoittaa siirtymän. Negatiivisia lukuja ei voi koodata suoraan — käytä ensin ZigZag-koodausta. Vältä VarInt-tavujen kopioimista kuvakaappauksista, joissa Base64-täyte (=) on saatettu poistaa, koska puuttuva täyte muuttaa tavurajoja.
Milloin käyttää tätä työkalua vs. koodia
Käytä selainpohjaista työkalua Protobufin wire-tavujen nopeaan tarkasteluun debuggaamisen aikana tai testejä kirjoittaessa. Tuotantokoodauksessa käytä kielikohtaisia VarInt-kirjastoja (`varint` npm:ssä, `binary.varint` Go:n encoding/binary-paketissa, `decode_varint` Pythonin google.protobuf.internal-moduulissa), jotka hoitavat suoratoiston, virheistä palautumisen ja ZigZag-muunnoksen yhdellä kutsulla.