进制转换指南:十进制、二进制、八进制、十六进制一次看清
换进制本身不难,难的是知道哪种写法是「数」、哪种是「字节串」。这个工具处理的是数,不是文本。
读硬件文档和权限时的日常
寄存器手册写 0x1F,代码里要判断第 5 位;Linux 权限 755 其实是八进制;设计稿给的颜色是 #FF8800,CSS 里要拆成三个字节。这些场合都需要在几种进制之间来回看。
写位掩码时更明显:1 << 4 是 16,也就是 0x10,也就是 0b10000。把同一个值用四种进制并排显示,比在脑子里换算可靠得多,也比在注释里手写三种进制更不容易出错。
- 读寄存器值、协议字段
- 换算 Linux 权限位的八进制
- 核对颜色码与位掩码
- 调试按位与、按位或的结果
前缀与精度
0x 开头按十六进制读,0b 开头按二进制读,其余按十进制。注意别写千分位逗号,1,000 会被当成非法输入;也不要在中间加空格。解析规则跟 JavaScript 的数字字面量一致,0o 开头的八进制通常也能读。
所有计算走 JavaScript 的 Number,安全整数上限是 2^53−1,也就是 9007199254740991。超过这个范围,末几位会悄悄变掉;需要精确处理大整数(比如 64 位 ID、哈希前缀)请改用 BigInt 或专门的工具。
- 0x 十六进制、0b 二进制,其余十进制
- 不要加千分位逗号或空格
- 超过 2^53−1 会丢精度
边界:截断、位宽与字节序
带小数的输入会被截断成整数,因为输出只列整数形式。负数、科学计数法的行为取决于输入解析,涉及这些值时建议先确认结果。工具也不做补零到固定位宽——8 位、16 位、32 位要自己补。
它不处理字节序。0x1234 作为一个数就是 4660,但存进内存是大端 12 34 还是小端 34 12,取决于机器和协议。混淆这两件事,是排查通信问题时最常见的坑之一。
- 小数直接截断,不四舍五入
- 不补零到 8 / 16 / 32 位
- 不处理大端小端
常见问题
为什么大数末几位变了?
因为内部用双精度浮点数表示,超过 2^53−1 后无法精确存储。这不是换算规则的问题,而是数值类型的天花板。处理 64 位整数请用 BigInt 或支持任意精度的工具。
0x 和 0b 前缀必须写吗?
写前缀才能按对应进制解析,不写就按十进制。0x1F 是 31,直接写 1F 会解析失败。十六进制里的字母大小写都行,0X 大写前缀同样可以识别。
小数为什么被去掉了?
工具只输出整数形式,小数部分直接截断而不是四舍五入。需要保留小数时,请先明确目标进制的表示规则,再用支持小数的工具处理。
相关工具:进制转换器