VarInt এনকোডার / ডিকোডার
দশমিক মান
VarInt আউটপুট
প্রযুক্তিগত বিবরণ
VarInt এনকোডার / ডিকোডার কীভাবে কাজ করে
টুলটি কী করে
VarInt টুলটি unsigned integer-কে Protobuf-স্টাইল LEB128 variable-length integer হিসেবে এনকোড করে এবং বাইনারি VarInt স্ট্রিম ডিকোড করে আবার integer তালিকায় ফিরিয়ে আনে। প্রতিটি মান তার magnitude অনুযায়ী 1–10 বাইটে এনকোড হয়, যেখানে প্রতিটি বাইটের high bit নির্দেশ করে আরও বাইট অনুসরণ করবে কি না। আউটপুট টেস্ট ও ফিক্সচারে সহজে এমবেড করার জন্য byte array, hexadecimal, বা Base64 হিসেবে দেখানো হয়।
ডেভেলপারদের সাধারণ ব্যবহারক্ষেত্র
Protobuf wire-format payload ডিবাগ করা ইঞ্জিনিয়াররা পূর্ণ Protobuf runtime চালু না করেই ফিল্ড ট্যাগ ও unsigned integer ফিল্ড ভ্যালু ইনস্পেক্ট করতে VarInt encode/decode ব্যবহার করেন। Bitcoin এবং অন্যান্য ক্রিপ্টোকারেন্সি ডেভেলপাররা VarInt-এনকোডেড স্ক্রিপ্ট লেন্থ ও ট্রানজ্যাকশন কাউন্ট পার্স করেন। ছোট সংখ্যার জন্য কমপ্যাক্ট হওয়ায় LEB128 গ্রহণ করা কাস্টম বাইনারি প্রোটোকল রিভার্স-ইঞ্জিনিয়ারিং করার সময়ও এই টুলটি সহায়ক।
ডেটা ফরম্যাট, টাইপ বা ভ্যারিয়েন্ট
LEB128 (Little-Endian Base 128) প্রতি বাইটে ৭টি payload bit আউটপুট করে, যেখানে সবচেয়ে গুরুত্বপূর্ণ বিটটি continuation flag হিসেবে কাজ করে। ছোট সংখ্যা (0–127) এক বাইট ব্যবহার করে; 16,383 পর্যন্ত সংখ্যা দুই বাইট ব্যবহার করে; এভাবে চলতে থাকে। ইনপুটে whitespace, কমা, বা newline দিয়ে আলাদা করা দশমিক সংখ্যা গ্রহণ করা হয়। আউটপুট hexadecimal, Base64, এবং raw byte array নোটেশনে পাওয়া যায়। Signed integer এনকোড করতে প্রথমে ZigZag transformation (n << 1) ^ (n >> 31) প্রয়োগ করা যায়।
সাধারণ ভুল ও এজ কেস
JavaScript number precision সর্বোচ্চ 2^53 − 1 পর্যন্ত; Number.MAX_SAFE_INTEGER-এর উপরের মান নিরাপদে এনকোড করা যায় না। Truncated VarInt স্ট্রিম (terminator বাইট অনুপস্থিত) আংশিকভাবে ডিকোড হয় এবং offset নির্দেশ করে একটি error ফেরত দেয়। নেগেটিভ সংখ্যা সরাসরি এনকোড করা যায় না — আগে ZigZag encoding ব্যবহার করুন। স্ক্রিনশট থেকে VarInt বাইট কপি করা এড়িয়ে চলুন, কারণ Base64 padding কেটে দেওয়া থাকতে পারে; padding না থাকলে byte boundary বদলে যায়।
কোডের বদলে কখন এই টুল ব্যবহার করবেন
ডিবাগিংয়ের সময় বা টেস্ট লেখার সময় Protobuf wire bytes দ্রুত ইনস্পেক্ট করার জন্য এই ব্রাউজার টুলটি ব্যবহার করুন। প্রোডাকশন এনকোডিংয়ের জন্য ভাষা-নেটিভ VarInt লাইব্রেরি ব্যবহার করুন (npm-এ `varint`, Go-এর encoding/binary-তে `binary.varint`, Python-এর google.protobuf.internal-এ `decode_varint`)—এগুলো এক কলেই streaming, error recovery, এবং ZigZag transformation হ্যান্ডেল করে।