DevToys Web Pro iconDevToys Web Proבלוג
דרגו אותנו:
נסו את תוסף הדפדפן:

מקודד / מפענח VarInt

12 בתים
מצב

ערכים עשרוניים

  • פלט VarInt

  • פרטים טכניים

    איך מקודד / מפענח VarInt עובד

    מה הכלי עושה

    כלי VarInt מקודד מספרים שלמים ללא סימן כמספרים שלמים באורך משתנה בסגנון LEB128 של Protobuf, ומפענח זרמי VarInt בינאריים חזרה לרשימות של מספרים שלמים. כל ערך מקודד ב-1–10 בתים בהתאם לגודלו, כאשר הביט הגבוה בכל בית מסמן האם יש בתים נוספים. הפלט מוצג כמערך בתים, הקסדצימלי או Base64 לצורך הטמעה קלה בבדיקות וב-fixtures.

    מקרי שימוש נפוצים למפתחים

    מהנדסים שמנפים שגיאות במטעני wire-format של Protobuf משתמשים בקידוד/פענוח VarInt כדי לבדוק תגיות שדות וערכי שדות של מספרים שלמים ללא סימן בלי להרים סביבת ריצה מלאה של Protobuf. מפתחי ביטקוין ומטבעות קריפטוגרפיים אחרים מפענחים אורכי סקריפט ומספרי טרנזקציות שמקודדים ב-VarInt. הכלי שימושי גם בעת הנדסה לאחור של פרוטוקולים בינאריים מותאמים אישית שמאמצים LEB128 בזכות הדחיסות שלו עבור מספרים קטנים.

    פורמטי נתונים, טיפוסים או וריאנטים

    LEB128 (Little-Endian Base 128) מפיק 7 ביטי מטען לכל בית, כאשר הביט המשמעותי ביותר משמש כדגל המשכיות. מספרים קטנים (0–127) משתמשים בבית אחד; מספרים עד 16,383 משתמשים בשני בתים; וכן הלאה. הקלט מקבל מספרים עשרוניים המופרדים ברווחים, פסיקים או שורות חדשות. הפלט זמין בהקסדצימלי, Base64 ובסימון של מערך בתים גולמי. ניתן לקודד מספרים שלמים עם סימן באמצעות החלת טרנספורמציית ZigZag תחילה: (n << 1) ^ (n >> 31).

    מלכודות נפוצות ומקרי קצה

    דיוק המספרים ב-JavaScript מוגבל ל-2^53 − 1; ערכים מעל Number.MAX_SAFE_INTEGER אינם ניתנים לקידוד בבטחה. זרמי VarInt קטועים (חסר בית מסיים) מפוענחים חלקית ומחזירים שגיאה שמציינת את ההיסט (offset). מספרים שליליים אינם ניתנים לקידוד ישירות — השתמשו קודם בקידוד ZigZag. הימנעו מהעתקת בתים של VarInt מצילומי מסך שבהם ייתכן שהוסרה ריפוד Base64, משום שחוסר ריפוד משנה את גבולות הבתים.

    מתי להשתמש בכלי הזה לעומת קוד

    השתמשו בכלי הדפדפן לבדיקה מהירה של בתים ב-wire של Protobuf במהלך ניפוי שגיאות או בעת כתיבת בדיקות. לקידוד בפרודקשן, השתמשו בספריות VarInt ייעודיות לשפה (`varint` ב-npm, `binary.varint` ב-encoding/binary של Go, `decode_varint` ב-google.protobuf.internal של Python) שמטפלות בזרימה, התאוששות משגיאות וטרנספורמציית ZigZag בקריאה אחת.