مرمز / مفكك VarInt
قيم عشرية
مخرجات VarInt
التفاصيل التقنية
كيف يعمل مُرمِّز/مفكِّك ترميز VarInt
ما الذي تفعله الأداة
تقوم أداة VarInt بترميز الأعداد الصحيحة غير الموقّعة كأعداد صحيحة متغيرة الطول بنمط LEB128 على طريقة Protobuf، وتفك ترميز تدفقات VarInt الثنائية إلى قوائم أعداد صحيحة. يُرمَّز كل مقدار في 1–10 بايت حسب حجمه، مع كون البت الأعلى في كل بايت يشير إلى ما إذا كانت هناك بايتات لاحقة. يُعرض الناتج كمصفوفة بايتات أو بصيغة سداسية عشرية أو Base64 لتسهيل تضمينه في الاختبارات والـ fixtures.
حالات استخدام شائعة للمطورين
يستخدم المهندسون الذين يصححون حمولة Protobuf بصيغة wire-format ترميز/فك ترميز VarInt لفحص وسوم الحقول وقيم الحقول الصحيحة غير الموقّعة دون تشغيل بيئة Protobuf كاملة. ويقوم مطوّرو Bitcoin وغيرها من العملات الرقمية بتحليل أطوال السكربتات وعدّادات المعاملات المرمّزة بـ 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 المبتورة (التي تفتقد بايت الإنهاء) تُفك ترميزها جزئيًا وتعيد خطأ يشير إلى الإزاحة. لا يمكن ترميز الأعداد السالبة مباشرة — استخدم ترميز ZigZag أولًا. تجنّب نسخ بايتات VarInt من لقطات الشاشة حيث قد تكون حشوة Base64 قد أزيلت، إذ إن نقص الحشوة يغيّر حدود البايتات.
متى تستخدم هذه الأداة بدلًا من الكود
استخدم أداة المتصفح للفحص السريع لبايتات Protobuf wire أثناء تصحيح الأخطاء أو أثناء كتابة الاختبارات. وللترميز في الإنتاج، استخدم مكتبات VarInt الأصلية للغة (`varint` على npm، و`binary.varint` في Go ضمن encoding/binary، و`decode_varint` في Python ضمن google.protobuf.internal) التي تتعامل مع البث (streaming) واستعادة الأخطاء وتحويل ZigZag في استدعاء واحد.