Enkoder / dekoder VarInt
Wartości dziesiętne
Wyjście VarInt
Szczegóły techniczne
Jak działa enkoder / dekoder VarInt
Co robi narzędzie
Narzędzie VarInt koduje liczby całkowite bez znaku jako zmiennodługościowe liczby całkowite w stylu Protobuf LEB128 oraz dekoduje binarne strumienie VarInt z powrotem do list liczb całkowitych. Każda wartość jest kodowana w 1–10 bajtach w zależności od swojej wielkości, a najwyższy bit każdego bajtu sygnalizuje, czy następują kolejne bajty. Wynik jest pokazywany jako tablica bajtów, zapis szesnastkowy lub Base64, co ułatwia osadzanie w testach i fixture'ach.
Typowe zastosowania dla programistów
Inżynierowie debugujący ładunki w formacie wire Protobuf używają kodowania/dekodowania VarInt, aby sprawdzać tagi pól i wartości pól liczb całkowitych bez znaku bez uruchamiania pełnego środowiska Protobuf. Programiści Bitcoina i innych kryptowalut parsują długości skryptów i liczby transakcji zakodowane jako VarInt. Narzędzie jest też pomocne przy inżynierii wstecznej niestandardowych protokołów binarnych, które wykorzystują LEB128 ze względu na jego kompaktowość dla małych liczb.
Formaty danych, typy lub warianty
LEB128 (Little-Endian Base 128) emituje 7 bitów danych na bajt, a najbardziej znaczący bit działa jako flaga kontynuacji. Małe liczby (0–127) używają jednego bajtu; liczby do 16 383 używają dwóch bajtów; i tak dalej. Wejście akceptuje liczby dziesiętne rozdzielone białymi znakami, przecinkami lub znakami nowej linii. Wyjścia są dostępne w zapisie szesnastkowym, Base64 oraz jako surowa notacja tablicy bajtów. Liczby całkowite ze znakiem można kodować, najpierw stosując transformację ZigZag (n << 1) ^ (n >> 31).
Typowe pułapki i przypadki brzegowe
Precyzja liczb w JavaScript kończy się na 2^53 − 1; wartości powyżej Number.MAX_SAFE_INTEGER nie mogą być bezpiecznie kodowane. Ucięte strumienie VarInt (brak bajtu terminatora) dekodują się częściowo i zwracają błąd wskazujący offset. Liczb ujemnych nie da się kodować bezpośrednio — najpierw użyj kodowania ZigZag. Unikaj kopiowania bajtów VarInt ze zrzutów ekranu, gdzie dopełnienie Base64 mogło zostać usunięte, ponieważ brak dopełnienia zmienia granice bajtów.
Kiedy używać tego narzędzia zamiast kodu
Użyj narzędzia w przeglądarce do szybkiej inspekcji bajtów wire Protobuf podczas debugowania lub pisania testów. Do kodowania produkcyjnego użyj natywnych dla języka bibliotek VarInt (`varint` na npm, `binary.varint` w Go w encoding/binary, `decode_varint` w Pythonie w google.protobuf.internal), które obsługują strumieniowanie, odzyskiwanie po błędach i transformację ZigZag w jednym wywołaniu.