悦省yueser.com

← 全部指南

进制转换指南:十进制、二进制、八进制、十六进制一次看清

换进制本身不难,难的是知道哪种写法是「数」、哪种是「字节串」。这个工具处理的是数,不是文本。

打开工具:进制转换器

读硬件文档和权限时的日常

寄存器手册写 0x1F,代码里要判断第 5 位;Linux 权限 755 其实是八进制;设计稿给的颜色是 #FF8800,CSS 里要拆成三个字节。这些场合都需要在几种进制之间来回看。

写位掩码时更明显:1 << 4 是 16,也就是 0x10,也就是 0b10000。把同一个值用四种进制并排显示,比在脑子里换算可靠得多,也比在注释里手写三种进制更不容易出错。

前缀与精度

0x 开头按十六进制读,0b 开头按二进制读,其余按十进制。注意别写千分位逗号,1,000 会被当成非法输入;也不要在中间加空格。解析规则跟 JavaScript 的数字字面量一致,0o 开头的八进制通常也能读。

所有计算走 JavaScript 的 Number,安全整数上限是 2^53−1,也就是 9007199254740991。超过这个范围,末几位会悄悄变掉;需要精确处理大整数(比如 64 位 ID、哈希前缀)请改用 BigInt 或专门的工具。

边界:截断、位宽与字节序

带小数的输入会被截断成整数,因为输出只列整数形式。负数、科学计数法的行为取决于输入解析,涉及这些值时建议先确认结果。工具也不做补零到固定位宽——8 位、16 位、32 位要自己补。

它不处理字节序。0x1234 作为一个数就是 4660,但存进内存是大端 12 34 还是小端 34 12,取决于机器和协议。混淆这两件事,是排查通信问题时最常见的坑之一。

常见问题

为什么大数末几位变了?

因为内部用双精度浮点数表示,超过 2^53−1 后无法精确存储。这不是换算规则的问题,而是数值类型的天花板。处理 64 位整数请用 BigInt 或支持任意精度的工具。

0x 和 0b 前缀必须写吗?

写前缀才能按对应进制解析,不写就按十进制。0x1F 是 31,直接写 1F 会解析失败。十六进制里的字母大小写都行,0X 大写前缀同样可以识别。

小数为什么被去掉了?

工具只输出整数形式,小数部分直接截断而不是四舍五入。需要保留小数时,请先明确目标进制的表示规则,再用支持小数的工具处理。

相关工具:进制转换器