DevToys Web Pro iconDevToys Web ProBlog
Értékeljen minket:
Próbáld ki a böngészőbővítményt:

VarInt enkóder / dekóder

12 bájt
Mód

Decimális értékek

  • VarInt kimenet

  • Technikai részletek

    Hogyan működik a VarInt kódoló / dekódoló

    Mit csinál az eszköz

    A VarInt eszköz előjel nélküli egész számokat Protobuf-stílusú LEB128 változó hosszúságú egészekké kódol, és a bináris VarInt adatfolyamokat visszafejti egészszám-listákká. Minden érték 1–10 bájtban kerül kódolásra a nagyságától függően, és minden bájt legmagasabb bitje jelzi, hogy következnek-e további bájtok. A kimenet bájttömbként, hexadecimálisan vagy Base64-ben jelenik meg, hogy könnyen beágyazható legyen tesztekbe és fixture-ökbe.

    Gyakori fejlesztői felhasználási esetek

    A Protobuf wire-format payloadokat hibakereső mérnökök VarInt kódolást/dekódolást használnak a mezőcímkék és az előjel nélküli egész mezőértékek vizsgálatához anélkül, hogy egy teljes Protobuf futtatókörnyezetet kellene elindítaniuk. A Bitcoin és más kriptovaluta-fejlesztők VarInt-kódolt szkripthosszakat és tranzakciószámokat parszolnak. Az eszköz akkor is hasznos, amikor egyedi bináris protokollokat fejtesz vissza, amelyek a LEB128-at a kis számoknál nyújtott tömörsége miatt alkalmazzák.

    Adatformátumok, típusok vagy változatok

    A LEB128 (Little-Endian Base 128) bájtonként 7 hasznos bitet bocsát ki, a legmagasabb bit pedig folytatásjelzőként működik. A kis számok (0–127) egyetlen bájtot használnak; a 16 383-ig terjedő számok két bájtot; és így tovább. A bemenetek tizedes számokat fogadnak szóközzel, vesszővel vagy újsorral elválasztva. A kimenetek elérhetők hexadecimális, Base64 és nyers bájttömb jelölésben. Az előjeles egészek kódolhatók úgy, hogy előbb ZigZag transzformációt alkalmazol: (n << 1) ^ (n >> 31).

    Gyakori buktatók és szélső esetek

    A JavaScript számábrázolás pontossága legfeljebb 2^53 − 1; a Number.MAX_SAFE_INTEGER feletti értékek nem kódolhatók biztonságosan. A csonkolt VarInt adatfolyamok (hiányzó lezáró bájt) csak részben dekódolódnak, és hibát adnak vissza, amely jelzi az eltolást. A negatív számok nem kódolhatók közvetlenül — előbb ZigZag kódolást használj. Kerüld a VarInt bájtok képernyőképekről való másolását, ahol a Base64 kitöltés (padding) le lehet vágva, mert a hiányzó kitöltés megváltoztatja a bájthatárokat.

    Mikor érdemes ezt az eszközt használni a kód helyett

    Használd a böngészős eszközt a Protobuf wire bájtok gyors ellenőrzésére hibakeresés közben vagy tesztek írásakor. Éles kódoláshoz használj nyelvnatív VarInt könyvtárakat (`varint` npm-en, `binary.varint` a Go encoding/binary csomagjában, `decode_varint` a Python google.protobuf.internal moduljában), amelyek egyetlen hívásban kezelik a streamelést, a hibajavítást és a ZigZag transzformációt.