رمزگذار / رمزگشای VarInt
مقادیر دهدهی
خروجی VarInt
جزئیات فنی
رمزگذار / رمزگشای VarInt چگونه کار میکند
این ابزار چه کاری انجام میدهد
ابزار VarInt اعداد صحیحِ بدون علامت را بهصورت اعداد صحیح با طول متغیر LEB128 به سبک Protobuf کدگذاری میکند و جریانهای باینری VarInt را دوباره به فهرست اعداد صحیح دیکد میکند. هر مقدار بسته به بزرگیاش در 1 تا 10 بایت کدگذاری میشود و بیتِ بالاییِ هر بایت نشان میدهد آیا بایتهای بیشتری در ادامه میآیند یا نه. خروجی بهصورت آرایهٔ بایت، هگزادسیمال یا Base64 نمایش داده میشود تا بهراحتی در تستها و فیکسچرها جاسازی شود.
موارد استفادهٔ رایج برای توسعهدهندگان
مهندسانی که payloadهای wire-format پروتوباف را دیباگ میکنند، از encode/decode VarInt برای بررسی تگهای فیلد و مقادیر فیلدهای عدد صحیحِ بدون علامت بدون راهاندازی یک runtime کامل 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 از اسکرینشاتها خودداری کنید؛ چون ممکن است padding در Base64 حذف شده باشد و نبود padding مرزهای بایت را تغییر میدهد.
چه زمانی از این ابزار استفاده کنیم در برابر کُد
برای بررسی سریع بایتهای wire پروتوباف هنگام دیباگ یا نوشتن تستها، از ابزار مرورگر استفاده کنید. برای کدگذاری در محیط تولید، از کتابخانههای VarInt بومیِ زبان استفاده کنید (`varint` در npm، `binary.varint` در encoding/binary زبان Go، `decode_varint` در google.protobuf.internal پایتون) که استریمینگ، بازیابی خطا و تبدیل ZigZag را در یک فراخوانی مدیریت میکنند.