DevToys Web Pro iconDevToys Web ProBlog
Valutaci:
Prova l'estensione del browser:

Encoder / Decoder VarInt

12 byte
Modalità

Valori decimali

  • Output VarInt

  • Dettagli tecnici

    Come funziona l’encoder / decoder VarInt

    Cosa fa lo strumento

    Lo strumento VarInt codifica interi senza segno come interi a lunghezza variabile in stile LEB128 di Protobuf e decodifica flussi binari VarInt in liste di interi. Ogni valore è codificato in 1–10 byte a seconda della sua grandezza, con il bit più alto di ogni byte che segnala se seguono altri byte. L’output viene mostrato come array di byte, esadecimale o Base64 per un facile inserimento in test e fixture.

    Casi d’uso comuni per sviluppatori

    Gli ingegneri che fanno debugging di payload in wire-format Protobuf usano la codifica/decodifica VarInt per ispezionare tag dei campi e valori di campi interi senza segno senza avviare un runtime Protobuf completo. Gli sviluppatori di Bitcoin e di altre criptovalute analizzano lunghezze di script codificate in VarInt e conteggi di transazioni. Lo strumento è utile anche nel reverse engineering di protocolli binari personalizzati che adottano LEB128 per la sua compattezza con numeri piccoli.

    Formati, tipi o varianti dei dati

    LEB128 (Little-Endian Base 128) emette 7 bit di payload per byte, con il bit più significativo che funge da flag di continuazione. I numeri piccoli (0–127) usano un singolo byte; i numeri fino a 16.383 usano due byte; e così via. Gli input accettano numeri decimali separati da spazi, virgole o nuove righe. Gli output sono disponibili in esadecimale, Base64 e notazione di array di byte grezzo. Gli interi con segno possono essere codificati applicando prima la trasformazione ZigZag (n << 1) ^ (n >> 31).

    Errori comuni e casi limite

    La precisione dei numeri in JavaScript arriva fino a 2^53 − 1; valori sopra Number.MAX_SAFE_INTEGER non possono essere codificati in modo sicuro. Flussi VarInt troncati (byte terminatore mancante) vengono decodificati parzialmente e restituiscono un errore che indica l’offset. I numeri negativi non possono essere codificati direttamente — usa prima la codifica ZigZag. Evita di copiare byte VarInt da screenshot in cui il padding Base64 potrebbe essere stato rimosso, perché il padding mancante altera i confini dei byte.

    Quando usare questo strumento rispetto al codice

    Usa lo strumento nel browser per un’ispezione rapida dei byte wire di Protobuf durante il debugging o mentre scrivi test. Per la codifica in produzione, usa librerie VarInt native del linguaggio (`varint` su npm, `binary.varint` in Go in encoding/binary, `decode_varint` in Python in google.protobuf.internal) che gestiscono streaming, recupero dagli errori e trasformazione ZigZag in un’unica chiamata.