进制转换的工作原理
每种位置计数系统都将数值表示为各位数字乘以基数幂次之和。切换进制意味着将同一数值用不同的幂级数重新书写。
- 验证输入字符集. 每种进制接受特定的数字集合。二进制接受 0 和 1;八进制接受 0-7;十进制接受 0-9;十六进制接受 0-9 和 A-F。超出所选字符集的字符会在转换开始前触发内联错误提示。
- 解析数值. 对于能放入 JavaScript Number 的值(最大 2^53-1),工具调用
parseInt(text, base)。超过此边界则回退到BigInt,确保任意大整数的转换精度不受影响。 - 在各目标进制中重新渲染. 解析后的数值通过
Number.prototype.toString(base)或BigInt.prototype.toString(base)转换为各输出进制。四个标准面板(二进制、八进制、十进制、十六进制)与自定义进制面板同步更新。 - 应用格式化选项. 前缀开关可在二进制、八进制和十六进制输出前添加 0b、0o 或 0x。数字分组在每四位二进制数字和每两位十六进制数字处插入下划线。大小写开关可选择 A-F 的大写或小写形式。
- 实时跨面板同步. 编辑任意面板会触发 100 毫秒防抖的重新转换,更新其他面板。每次按键时,当前正在输入的面板被视为数据来源。
为什么使用进制转换器
- 读取内存转储. 调试器、反汇编器和核心转储查看器以十六进制显示地址和寄存器值。将其转换为十进制,便于与同一跟踪中其他地方报告的计数、大小和偏移量进行比较。
- 处理颜色代码. CSS、设计工具和图像格式以十六进制三元组表示颜色,如 #d2511a。将每对数字转换为十进制,即可得到颜色拾取器或无障碍检查器所需的 rgb(210, 81, 26) 形式。
- 解读文件权限. Unix chmod 值以八进制表示:755 表示 rwxr-xr-x,只需将每位八进制数字转换为三位二进制位。此转换器一步完成映射,无需翻阅 man 手册即可核对权限设置。
- 调试位标志. 网络协议、内核系统调用和硬件寄存器将多个布尔标志压缩到单个整数中。以二进制读取该整数,可一目了然地看出哪些位已置位,这正是排查标志未生效原因时所需的信息。
常见应用场景
进制转换在日常开发、安全和硬件工作中频繁出现,只要数字的含义不仅仅是一个计数值。
- 嵌入式固件:从 JTAG 探针读取十六进制转储,找到函数地址,用调试脚本所需的十进制偏移量写入断点命令。
- 网络安全:将点分十进制表示的 32 位子网掩码转换回二进制,统计前缀长度,然后以 CIDR 形式写入 ACL 规则。
- CTF 解题与密码挑战:在十六进制、十进制和二进制之间反复切换,在 XOR 运算下比对泄露的密钥片段与候选明文。
一个完整示例
在十进制面板中输入 255。十六进制面板更新为 FF(开启前缀后显示 0xFF),二进制面板显示 11111111(分组后为 1111_1111),八进制面板显示 377。将自定义面板基数设为 36,同一数值渲染为 73。在十进制面板中输入超大数值 123456789012345678901234567890,十六进制面板使用 BigInt 路径渲染为 18EE90FF6C373E0EE4E3F0AD2。
FAQ
什么是数字进制?
数字进制(基数)是位置计数系统在进位到下一位之前使用的不同数字的个数。十进制(10 进制)使用 0-9;二进制(2 进制)只用 0 和 1;十六进制(16 进制)使用 0-9 加上 A-F。切换进制时数字的值不变,只是数字的书写和分组方式发生改变。
为什么编程中使用十六进制?
一位十六进制数字恰好对应四位二进制位,因此两位十六进制数字对应一个字节,八位对应一个 32 位字。这使十六进制成为内存地址、寄存器内容、颜色三元组和加密密钥最紧凑的人类可读形式。读 0xFF 比读 11111111 快得多,同时位模式也一目了然。
能否转换超过 36 进制的数字?
此工具上限为 36 进制,因为这是 JavaScript 原生 parseInt 和 toString API 的上限——它们以 0-9 加 A-Z 作为数字字母表。37-62 进制可通过自定义字母表实现(如比特币地址使用的 Base58),但由于每种更高进制都需要自己的规范数字顺序,它们被归为独立工具处理。
支持负数和浮点数吗?
负整数在每种进制中都以前置减号表示,与 Number.prototype.toString 的默认行为一致。在指定位宽(8、16、32、64 位)下的补码表示是我们计划新增的独立视图。浮点数进制转换也超出了当前版本的范围;此工具仅处理整数值。
进制转换是固件、安全和图形工作中反复出现的小任务。在浏览器标签页中完成运算,使用 Node 和 V8 已有的相同算术原语,计算快速且数据始终留在您的设备上。