DevToys Web Pro iconDevToys Web ProΙστολόγιο
Αξιολογήστε μας:
Δοκιμάστε την επέκταση προγράμματος περιήγησης:

Κωδικοποιητής / Αποκωδικοποιητής VarInt

12 bytes
Λειτουργία

Δεκαδικές τιμές

  • Έξοδος VarInt

  • Τεχνικές λεπτομέρειες

    Πώς λειτουργεί ο Κωδικοποιητής / Αποκωδικοποιητής VarInt

    Τι κάνει το εργαλείο

    Το εργαλείο VarInt κωδικοποιεί μη προσημασμένους ακέραιους ως μεταβλητού μήκους ακέραιους τύπου LEB128 σε στυλ Protobuf και αποκωδικοποιεί δυαδικές ροές VarInt πίσω σε λίστες ακεραίων. Κάθε τιμή κωδικοποιείται σε 1–10 bytes ανάλογα με το μέγεθός της, με το υψηλό bit κάθε byte να σηματοδοτεί αν ακολουθούν περισσότερα bytes. Η έξοδος εμφανίζεται ως πίνακας bytes, δεκαεξαδικό ή Base64 για εύκολη ενσωμάτωση σε tests και fixtures.

    Συνηθισμένες περιπτώσεις χρήσης για προγραμματιστές

    Μηχανικοί που αποσφαλματώνουν payloads σε wire-format Protobuf χρησιμοποιούν κωδικοποίηση/αποκωδικοποίηση VarInt για να επιθεωρούν tags πεδίων και τιμές μη προσημασμένων ακέραιων πεδίων χωρίς να στήνουν ένα πλήρες Protobuf runtime. Προγραμματιστές του Bitcoin και άλλων κρυπτονομισμάτων αναλύουν μήκη scripts και πλήθη συναλλαγών κωδικοποιημένα ως VarInt. Το εργαλείο είναι επίσης χρήσιμο κατά το reverse-engineering προσαρμοσμένων δυαδικών πρωτοκόλλων που υιοθετούν το LEB128 λόγω της συμπαγούς αναπαράστασής του για μικρούς αριθμούς.

    Μορφές δεδομένων, τύποι ή παραλλαγές

    Το LEB128 (Little-Endian Base 128) εκπέμπει 7 bits φορτίου ανά byte, με το πιο σημαντικό bit να λειτουργεί ως σημαία συνέχισης. Μικροί αριθμοί (0–127) χρησιμοποιούν ένα μόνο byte· αριθμοί έως 16.383 χρησιμοποιούν δύο bytes· και ούτω καθεξής. Οι είσοδοι δέχονται δεκαδικούς αριθμούς χωρισμένους με κενά, κόμματα ή νέες γραμμές. Οι έξοδοι είναι διαθέσιμες σε δεκαεξαδικό, Base64 και σημειογραφία ακατέργαστου πίνακα bytes. Οι προσημασμένοι ακέραιοι μπορούν να κωδικοποιηθούν εφαρμόζοντας πρώτα μετασχηματισμό ZigZag (n << 1) ^ (n >> 31).

    Συνηθισμένα λάθη και οριακές περιπτώσεις

    Η ακρίβεια αριθμών της JavaScript κορυφώνεται στο 2^53 − 1· τιμές πάνω από το Number.MAX_SAFE_INTEGER δεν μπορούν να κωδικοποιηθούν με ασφάλεια. Κολοβωμένες ροές VarInt (λείπει το byte τερματισμού) αποκωδικοποιούνται μερικώς και επιστρέφουν σφάλμα που υποδεικνύει το offset. Οι αρνητικοί αριθμοί δεν μπορούν να κωδικοποιηθούν απευθείας — χρησιμοποιήστε πρώτα κωδικοποίηση ZigZag. Αποφύγετε την αντιγραφή bytes VarInt από στιγμιότυπα οθόνης όπου μπορεί να έχει αφαιρεθεί το padding του Base64, καθώς η έλλειψη padding αλλάζει τα όρια των bytes.

    Πότε να χρησιμοποιήσετε αυτό το εργαλείο έναντι κώδικα

    Χρησιμοποιήστε το εργαλείο στο πρόγραμμα περιήγησης για γρήγορη επιθεώρηση των Protobuf wire bytes κατά την αποσφαλμάτωση ή ενώ γράφετε tests. Για κωδικοποίηση παραγωγής, χρησιμοποιήστε εγγενείς στη γλώσσα βιβλιοθήκες VarInt (`varint` στο npm, `binary.varint` στο encoding/binary της Go, `decode_varint` στο google.protobuf.internal της Python) που χειρίζονται streaming, ανάκτηση από σφάλματα και μετασχηματισμό ZigZag με μία κλήση.