ToolAct工具行动

进制转换工具

在线进制转换工具,支持二进制、八进制、十进制、十六进制及自定义进制互转

输入内容
转换结果
二进制 (2)
八进制 (8)
十进制 (10)
十六进制 (16)

输入进制

什么是进制转换?

进制转换是将一个数字从一种数制表示法转换为另一种表示法的过程。常见的进制包括二进制(基数2)、八进制(基数8)、十进制(基数10)和十六进制(基数16)。

在计算机科学中,二进制是最基本的数制,因为计算机内部所有数据都以二进制形式存储。十六进制常用于表示内存地址和颜色值,因为它比二进制更紧凑且易于阅读。八进制在Unix文件权限等场景中也有广泛应用。

使用方法

使用步骤

  1. 在输入框中输入要转换的数字(如 255、FF、11111111)
  2. 选择输入数字的进制:二进制、八进制、十进制、十六进制或自定义进制
  3. 工具自动将输入转换为二进制、八进制、十进制和十六进制
  4. 点击结果旁的「复制」按钮即可复制到剪贴板

转换提示

  • 确保输入的数字在所选进制下有效;例如,二进制只接受 0 和 1,十六进制接受 0-9 和 A-F。
  • 大整数在某些场景下可能超出 JavaScript 安全数字范围,因此请用专用任意精度工具验证关键工程数值。

使用场景

从多个程序员常用进制检视同一个整数选择二进制、八进制、十进制、十六进制或 2 到 36 之间的自定义进制,然后同时查看该值在 2、8、10 和 16 进制下的表示。每个输出都可以独立复制,方便粘贴到源代码、文档片段、寄存器表或评审评论中,这些场景下同一个数字经常需要并列显示两种进制。
转换来自日志、寄存器和协议文档的数值适用于权限掩码、设备寄存器、小型数字 ID、类颜色值、位标志以及从文档中复制的示例,当同一个数字用另一种进制表示更容易理解时尤为方便。转换完全在页面内完成,内部寄存器地址、操作码值或规范片段可以在不经过任何外部服务的情况下进行检查。
明确工具的整数转换限制页面使用 JavaScript 的 parseInt 和 Number.toString,最适合普通无符号整数的表示。非常大的整数、小数、负数的二进制形式以及补码解释仍需要专用计算器来处理。
逐位解码位标志组合将权限掩码或寄存器值转换为二进制,然后按 4 位或 8 位分组来读取各个标志,如 0x1F0 或 0b1010_0001。在记录 POSIX 权限位、GPIO 寄存器或功能标志时很有用,每个位都有特定含义,单看整数值无法直接看出。分组规则基于二进制与十六进制之间 2^4 = 16 的关系,每 4 位始终对应一位十六进制数字,每 3 位对应一位八进制数字;前导补零使得 8 位字节(0xFF)能整齐对齐到两位十六进制而非折叠成一位。
显式处理补码和有符号位宽当源值是有符号的 int8、int16 或 int32 时,要记住页面返回的是无符号表示。解读协议转储、结构体字段或嵌入式固件日志中的负值时,需要使用感知位宽的公式手动转换。补码意味着一个 w 位宽的值 v,如果最高位被置位,实际表示 v - 2^w,因此 8 位字节 0xFF 作为无符号是 255,作为有符号是 -1;16 位字 0x8000 是 -32768。前导补零对固定宽度字段很重要,如 MAC 地址、IPv6 十六位组或 24 位颜色通道;而小数进制转换(如十进制 0.625 转二进制 0.101)不受 parseInt/toString 支持,需要单独的算法。

技术原理

进制转换是位值记数法的算术运算。在基数 b 中,位置 p 上的数字 d 对总值的贡献为 d × b^p,一个 N 位数的值为 Σᵢ₌₀..N₋₁ dᵢ × b^(N-1-i)。十进制是基数 10,二进制是基数 2,八进制是基数 8,十六进制是基数 16。两个核心算法完成所有工作:从基数 b₁ 转换为十进制时,计算多项式值(Horner 方法是标准的原地形式:`value = value * b₁ + digit`);从十进制转换为基数 b₂ 时,反复除以 b₂ 并收集余数,然后反转。两种算法的时间复杂度为 O(N)(每位),额外空间为 O(1),适用于 2 到 36 之间的任意基数(数字 '0'-'9' + 'A'-'Z' 对应 10-35)。 大多数实际的进制转换工作会跳过中间的十进制步骤,直接在 2 的幂次基数之间转换。二进制 ↔ 八进制将每 3 位二进制分为一组对应一个八进制位(因为 2³ = 8),二进制 ↔ 十六进制将每 4 位分为一组对应一个十六进制位(2⁴ = 16)。这就是为什么 0xFF = 11111111₂,0755(八进制,Unix 文件权限)= 111101101₂ = 493(十进制)。本页面还支持基数 32(RFC 4648 §6,用于某些认证令牌)和基数 36(传统紧凑 URL 短链字母表 '0'-'9' + 'A'-'Z'),由于 32 和 36 不是 2 的幂,转换为二进制是唯一合理的方式。 本页面使用 JavaScript 内置的 parseInt(value, base) 进行解析,使用 (123).toString(base) 进行输出。两者都受 Number 精度限制:IEEE 754 binary64 有 53 位尾数,因此大于 2⁵³ - 1 = 9,007,199,254,740,991 的整数值会丢失精度。例如,Number.MAX_SAFE_INTEGER + 1 等于 Number.MAX_SAFE_INTEGER + 2 —— 这两个大值无法精确表示。对于任意精度的整数进制转换,BigInt 是现代方案:BigInt 中的 parseInt 式逻辑很直接,BigInt.prototype.toString(base) 支持 2 到 36 之间的任意基数。加密库、UUID 生成器和大数运算(BIP-32 HD 钱包、RSA 密钥)都出于这个原因使用 BigInt。 同样的算法也可以处理有符号数和浮点数,但有一些注意事项。在补码表示法中(从 1965 年 IBM System/360 设计开始,所有现代 CPU 都使用的主流有符号整数表示法),-1 是全 1(32 位为 0xFFFFFFFF,64 位为 0xFFFFFFFFFFFFFFFF),最高位是符号位。要将负的补码整数转换为十进制,需减去 2ⁿ(其中 n 为位宽)。对于浮点数,IEEE 754 binary64 存储符号位(1 位)、指数(11 位,偏移量 1023)和尾数(52 位,隐含前导 1)。因此任意 binary64 的十进制转换并非精确的 —— IEEE 754 中的 0.1 实际上是 0.1000000000000000055511151231257827021181583404541015625,这就是为什么金融代码使用整数分或 decimal 库而非浮点数。

  • 位值记数法:在基数 b 中,位置 p 上的数字 d 贡献 d × b^p。一个 N 位数的完整值为 Σᵢ dᵢ × b^(N-1-i)。Horner 方法在 O(N) 时间和 O(1) 空间内求值:`value = value * b + digit`。
  • 从十进制转换为基数 b:反复除以 b 并收集余数;反向读取即为目标表示。对于 N 位输出,算法复杂度为 O(N)。
  • 直接的二进制 ↔ 十六进制转换:每个十六进制位恰好对应 4 位二进制,因此 0xFF = 11111111₂。二进制 ↔ 八进制:每个八进制位对应 3 位二进制,因此 0755 = 111101101₂。
  • 补码(所有现代 CPU 用于有符号整数的表示法):高位为符号位,负数编码为 2ⁿ - |x|。32 位补码中的 -1 为 0xFFFFFFFF。
  • IEEE 754 binary64(JavaScript Number):1 位符号位 + 11 位偏移指数(偏移量 1023)+ 52 位尾数(隐含前导 1)。最大安全整数为 2⁵³ - 1 = 9,007,199,254,740,991;超出此值会丢失精度。
  • parseInt(value, base) 和 Number.prototype.toString(base) 支持 2-36 进制,使用 53 位 Number 尾数。需要任意精度时,使用 BigInt('value', base) 和 BigInt.prototype.toString(base)。
  • 基数 32(RFC 4648 §6)和基数 36('0'-'9' + 'A'-'Z')需要二进制作为中间步骤,因为 32 和 36 不是 2 的幂 —— 一个数字不对应固定的比特数。
  • 边界情况:负基数或补码中有符号数的带余整数除法需要符号处理;本页面将输入视为无符号绝对值,并在最终结果上重新应用符号。

示例

十进制转十六进制

输入:  255 (十进制)
输出:  FF (十六进制)
说明:  常见于 CSS 颜色值,比如红色就是 #FF0000

二进制转十进制

输入:  11111111 (二进制)
输出:  255 (十进制)
说明:  8 位二进制的最大值,也就是无符号字节的上限

十六进制转二进制

输入:  1A3F (十六进制)
输出:  1101000111111 (二进制)
说明:  每 4 位二进制对应 1 位十六进制

八进制转十六进制

输入:  377 (八进制)
输出:  FF (十六进制)
说明:  Unix 权限 377 (rwxrwxrwx) 等于十六进制 FF

自定义进制(36 进制)

输入:  ZZ (36 进制)
输出:  1295 (十进制)
说明:  36 进制使用 0-9 和 A-Z;ZZ 是该进制下的最大两位数

常见问题

支持哪些进制?

二进制(2 进制)、八进制(8 进制)、十进制(10 进制)、十六进制(16 进制),以及 2 到 36 之间任意自定义进制。超过 36 的进制需要扩展字母表,超出本工具范围。

高于 10 进制时字母怎么表示?

10 以上的进制用字母补足:十六进制中 A=10、B=11……F=15;36 进制中从 A=10 一直到 Z=35。输入大小写均可,输出默认大写。

怎么转换负数或小数?

负整数可直接转换——内部使用 JavaScript 的 BigInt 或带符号整数存储。小数(例如十进制 0.5 → 二进制 0.1)也支持,但因浮点精度限制,最多大约 15 位有效数字。

二进制补码和原码(带符号位)有什么区别?

二进制补码是计算机存储负整数的方式——最高位表示符号,其余位编码数值加偏移。原码只是单纯翻转一个符号位。本页面通常以原码风格显示(类似十进制带正负号),不直接显示补码位模式。如果需要看补码,请使用程序员模式计算器。

为什么我的十六进制结果与别的工具补零长度不同?

十六进制数值前面是否补零并不固定。0xff 和 0x000000FF 是同一个数,只是显示宽度不同。本页面不会自动补零;如果场景需要固定宽度(例如 MAC 地址、IPv6 段),请手动补足前导零。

对数值大小有限制吗?

JavaScript 的 BigInt 可处理任意大小的整数,因此整数之间的进制转换在实际场景下没有长度限制。小数转换则受 Number 的 15-17 位有效数字精度限制。

可以用它转换 IP 地址或颜色代码吗?

可以间接处理:把每段单独转换。点分十进制 IP 可逐段把十进制转成十六进制;#RRGGBB 颜色代码可拆成三段两位字节分别转换。如需自动解析,使用专门的 IP 工具或颜色工具会更方便。