VarInt 編碼器 / 解碼器
十進位數值
VarInt 輸出
技術細節
VarInt 編碼器/解碼器的運作方式
工具功能說明
VarInt 工具會將無號整數編碼為 Protobuf 風格的 LEB128 可變長度整數,並將二進位 VarInt 串流解碼回整數清單。每個值會依其大小以 1–10 個位元組編碼,每個位元組的最高位用來表示後面是否還有更多位元組。輸出可顯示為位元組陣列、十六進位或 Base64,方便嵌入測試與 fixture。
常見的開發者使用情境
在除錯 Protobuf 線路格式(wire-format)負載時,工程師會使用 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 串流(缺少終止位元組)只會部分解碼,並回傳指出位移量的錯誤。負數無法直接編碼——請先使用 ZigZag 編碼。避免從螢幕截圖複製 VarInt 位元組,因為 Base64 的補齊(padding)可能被移除,缺少補齊會改變位元組邊界。
何時使用此工具 vs 程式碼
在除錯或撰寫測試時,需要快速檢視 Protobuf 線路位元組,使用此瀏覽器工具即可。若要用於正式環境的編碼,請使用各語言原生的 VarInt 函式庫(npm 上的 `varint`、Go 的 encoding/binary 中的 `binary.varint`、Python 的 google.protobuf.internal 中的 `decode_varint`),它們能在一次呼叫中處理串流、錯誤復原與 ZigZag 轉換。