VarInt 编码器 / 解码器
十进制值
VarInt 输出
技术详情
VarInt 编码器 / 解码器的工作原理
工具功能
VarInt 工具将无符号整数编码为 Protobuf 风格的 LEB128 可变长度整数,并将二进制 VarInt 流解码回整数列表。每个值根据大小以 1–10 个字节编码,每个字节的最高位用于指示是否还有后续字节。输出以字节数组、十六进制或 Base64 显示,便于嵌入测试与夹具数据。
常见开发者使用场景
在调试 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 填充可能被去掉,缺失填充会改变字节边界。
何时使用此工具而非代码
在调试或编写测试时,用该浏览器工具快速检查 Protobuf 线格式字节。用于生产环境编码时,请使用语言原生的 VarInt 库(npm 上的 `varint`、Go 的 encoding/binary 中的 `binary.varint`、Python 的 google.protobuf.internal 中的 `decode_varint`),它们可在一次调用中处理流式读写、错误恢复以及 ZigZag 变换。