Command Palette

Search for a command to run...

数字底数转换器:二进制、八进制、十进制、六进制和以 36 为底的所有内容

数字底数转换器:二进制、八进制、十进制、六进制和以 36 为底的所有内容

T
Toolz Team
|Jul 17, 2026|23 最小读数

转换器 合集的一部分

第一次基本转换让我花了一个工作之夜,罪魁祸首是一个权限错误。部署脚本将文件模式写为 chmod 755并且配置加载程序从 JSON 文件中读取与数字相同的值 755。JSON没有八进制字面,装载机通过 755 对于预期八进制模式的系统调用,该模式被解释为十进制 755,二进制十进制 755 是 1011110011- 在九位字段中十位胡言乱语。文件最终获得了无人要求的权限,也无人能解释。

这就是基础混乱在实践中的样子。它几乎从来都不是一个难题。它是一个在一种符号中是正确的,在另一种符号中是灾难性的值,它跨越了一个边界,没有人写下哪个基础是二进制、八进制、十进制和十六进制。这是写出相同整数的四种方法,计算机会很高兴地让你将它们混合起来。

所以我建造了 数值基数转换器Toolz.dev 为我当时真正达到的目的:粘贴一个值,说出它是什么基数,并同时在其他每个基数中看到它 - 连同位数,字节数和以小字节排列的二进制文件,因此它与上面的十六进制数字对齐。它处理从 2 到 36 的任何基数,它接受 0x0b、和 0o 前缀,并且它在 BigInt 中执行所有算术,因此 256 位哈希恰好转换为垃圾,而不是悄悄舍入为垃圾。

TL;博士: 当您转换数字时,数字's 值永远不会改变 - 只有符号才会改变。 数值基数转换器 2到36的任何基数之间转换整数,同时显示二进制,八进制,十进制和十六进制,报告位和字节长度,使用bigint,因此精度在任何大小下都成立,并且完全在浏览器中运行。

主要特点

2 到 36 的任何基数

2进制、8进制、10进制、16进制得到专用快捷按钮,因为它们是真代码中出现的四个。但是源和目标下拉运行从2进制到36进制的全范围- 上限是你用完不区分大小写的字母数字(十位加二十六个字母)的点。3进制、12进制、20进制、32进制、36进制都是一键远,并且每个渲染都带有标准 0-9A-Z 数字字母表。

精确的大数算法

这是营销文案中最重要、显示最少的功能。JavaScript 编号是 IEEE-754 的双倍,它们仅代表整数,最多可达 2^53 − 1,即 9,007,199,254,740,991。过去的, parseIntNumber 始四舍五入- 默默地,没有错误,产生一个看起来合理且错误的值,web上的大多数基础转换器都完全建立在这些功能之上。

这个将数字逐位解析到 BigInt 累加器中 (value = value * base + digit()并通过重复除法进行渲染。没有精密上限。一个64位ID,一个256位哈希,一个RSA模量,一个500位十进制 - 全部精确转换。

一次所有基地

1个输入,4个输出,live。panel同时显示二进制,八进制,十进制,十六进制,再加上你选择的自定义基数,如果它不是那四个之一。大多数基数转换真的都是交叉检查-你想确认你的调试器中的十六进制和你的日志行中的十进制是相同的数字-同时看到所有四个将一个三步任务变成一眼。

位长度、字节长度和半字节分组

人们转换为二进制的原因通常不是对位的好奇,这是一个大小问题:这是否适合一个字节、一个 32 位 int、一个有符号短?因此转换器报告有效位长度(255 → 8 位、256 → 9 位)和向上舍入的字节长度。二进制输出被填充到整数个半字节并分组为四,因此每组四位位直接位于其编码的十六进制数字下方。

原谅输入,精确的错误

现实世界的价值观随着装饰而到来。 0xDEADBEEF 从堆栈跟踪, 0b1010_1111 从 Rust 字面意思来看, 0o755 来自 chmod, FF FF FF hex编辑器中复制出来的。它全部被接受:前缀在同意所选底座时被剥离,下划线和空格被当作数字分隔符。

当一个数字对于您选择的基数来说是非法的时,错误会将其命名。类型 1092 8进制,你就得到了 "9" is not valid in base 8. Base 8 uses 0-7.- 不是通用的"输入无效",它不会告诉你要看哪个角色。

负数支持

负值用前导减号进行转换和渲染。那是符号-幅度表示法,这是诚实的答案,原因如下面的 two's 补码部分所述。

完全在您的浏览器中运行

No网络往返,no上传,no日志记录。结果更新在每个击键上,因为算术发生在几微秒之外,并且页面加载后一直工作,完全没有连接。

如何使用数字底座转换器

1步:输入您的号码

From字段中键入或粘贴数值, 您无需先剥光装饰 - 0xFF0b10100o7551010_1111、和 DE AD BE EF 都接受。领导 +- 标志有效。前导零是无害的。

2步:选择源基

Tell转换器怎么读你打的, 这是人们跳过的步骤, 也是重要的: 101 是二进制5,八进制65,十进制101,十六进制257,四个不同的数字,一串字符,快捷键涵盖二进制、八进制、十进制、十六进制;下拉覆盖2到36的所有内容。

如果源库无法读取您输入的字符,您将收到一条命名该字符的消息,而不是无声的错误答案。

3步:选择目标基数

Pick出你要的base。结果马上出现, 键入时更新-没有转换按钮, 因为没有服务器等待。交换按钮反转方向, 将结果移入输入, 这是往返一个值并确认它存活下来的最快方法。

4步:阅读面板

您获得的转换如下:

  • 一次所有基地- 二进制、八进制、十进制和十六进制中的相同值,如果您选择一个,还加上您的自定义基数。
  • 位长度、字节长度、十六进制数字- 尺寸数字。
  • 分组二进制- 位被填充并分成小字节,与十六进制数字对齐。

5步:复制

复制裸结果,或复制完整表达式(255 (base 10) = FF (base 16))当你希望转换在提交消息、代码注释或错误报告中进行自我记录时,第二个选项是当你向别人解释一个数字时使用的选项,因为它携带了底数和数字。

位置符号的实际工作原理

我们使用的每个基础都是 a 位置 system,意思是数字's的贡献取决于它所在的位置,在b进制中,位置i(从右侧零开始计算)的数字是值得的 digit × b^i.那个单一的规则生成每一个基。

1,234 以十进制为单位:

1×10³ + 2×10² + 3×10¹ + 4×10⁰ = 1000 + 200 + 30 + 4 = 1234

现在拿 1A3 16进制中, 其中A为10:

1×16² + 10×16¹ + 3×16⁰ = 256 + 160 + 3 = 419

相同的规则,不同的基础。和 10101111 在二进制:

1×2⁷ + 0 + 1×2⁵ + 0 + 1×2³ + 1×2² + 1×2¹ + 1×2⁰ = 128 + 32 + 8 + 4 + 2 + 1 = 175

2个算法脱离这个规则是整个转换器:

以 b 为基数读取一个数字 是从左到右的折叠。从零开始, 对于每个数字: value = value × b + digit.这是霍纳's方法,也是为什么转换器永远不需要计算的原因 b^i 明确地 - 无求幂、无浮点、无累积误差。

C进制写一个值 is repeated division。c 除, 余数作为下一个数字(从右边开始), 与商重复直到它打到零, 余数,向后读, 是数字。

2个运算都精确地对整数,这就是为什么在BigInt中做它们会给你一个在流水线任何地方都没有四舍五入的转换,值123456789012345678901234567890转换为十六进制as 18EE90FF6C373E0EE4E3F0AD2- 97 位,13 个字节 - 并转换回您开始使用的十进制。尝试使用构建的转换器 parseInt

36进制是实用天花板因为它是你用不区分大小写的ASCII字母数字书写的最后一个进制有个值得注意的细节: 0-9 给您十位数字, A-Z give you twenty-six more, and 10 + 26 = 36。push pass it and you need case sensitivity (base 62) or a symbol alphabet (Base64), at that point you are no ren doing arithmetic notation - you are doing binary-to-text encoding, which is a different job with different rules。if that is w Base64 转换器 相反。

为什么十六进制映射如此干净地进入二进制

Hex在编程中并不受欢迎,因为它是紧凑的。在人类熟悉度方面,对于相同的值,10进制比16进制更紧凑,如果紧凑是我们的目标,我们将使用36进制。Hex获胜有一个结构原因: 16就是24

这意味着一个十六进制数字恰好编码四个二进制数字 - 一个半字节 - 没有进位跨越它们之间的边界映射是一个查找表,而不是算术运算:

二进制 六角形 二进制 六角形
0000 0 1000 8
0001 1 1001 9
0010 2 1010
0011 3 1011
0100 4锛屽湪娴欐睙鏉 1100 C.
0101 5锛屽湪娴欐睙鏉 1101 D
0110 6 1110 E
0111 7 1111 F

11111111 通过将其分成 1111 1111、从表中读出每个小字节,并连接: FF.无算术.转换 0xDEADBEEF 通过扩展每个数字来二进制: 1101 1110 1010 1101 1011 1110 1110 1111.结构得以存续。

因为一个字节是八位,十六进制数字是四位, 一个字节总是恰好是两个十六进制数字0x00 通过 0xFF 涵盖每个可能的字节,这就是为什么十六进制转储、MAC 地址、颜色代码和内存地址都用十六进制编写的原因。 0xFF 1眼就告诉你,你正在看一个全字节,小数255告诉你什么都不是- 你要知道255是28 − 1,你要对65535和4294967295做同样的召回。

Octal工作原理相同,8 = 2³,所以一个八进制数字恰好是三位,这正是Unix文件权限是八进制的原因:模式是三组三位(为用户读、写、执行、组、其他),三位是一个八进制数字。 chmod 755111 101 101-而现在数字意味着什么,而不是你记住的神奇数字,这也是我的权限错误发生的原因: 755 十进制中不是 755 在八进制中,与字符串无关 755 宣布是哪一个。的 数值基数转换器 部分存在是为了让您可以在三秒内解决该问题。

Two's补码,以及为什么这个工具使用减号

进入 -42 转换器返回 -101010.有些人期待 11010110 并考虑负号是一个错误。它不是,原因值得理解,因为它是二进制最容易被误解的单一事物。

Two's补码不是一个数的性质,它是定宽寄存器的性质。

值−1没有规范的二进制表示,在一个8位元的two's补码寄存器中它是 11111111 (x),在2019年10月10日,在2019年10月10日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2019年10月11日,在2010xFF)。在 16 位中是 0xFFFF.在32位元中, 0xFFFFFFFF.64位元中,十六个F,这不是写同一个位元模式的四种不同方式;它们是四个 不同的位模式的,而哪个是正确的完全取决于一个宽度,它存在于你的类型声明中,而不是在数字中。

BigInt是什么,以及这个转换器的工作原理- 一个任意精度整数没有宽度,所以没有附加上下文,唯一有意义的表示就是符号-幅度:一个减号后跟幅度's位数,这就是你得到的,它是诚实的答案,而不是自信地错误的答案。

当你 need a two's补码模式,配方很简单,你可以在这个工具中运行它:

  1. 决定你的宽度, n 位。
  2. 计算 2^n + value (与x)一起使用,在使用时,可以选择使用任何一种方法,并且可以选择使用任何方法 value 负(负)。对于 8 位中的 −42:256 − 42 = 214。
  3. 214转换为您的目标基数: 11010110 在二进制中, D6 在十六进制中。

您可能学到的机械快捷方式 - 倒置每一位,然后添加一位 - 产生相同的结果,因为倒置 x 的所有 n 位给出 (2^n − 1) − x并且加一给出 2^n − x。算术恒等式是相同的运算;翻位版本只是你如何在没有分隔符的情况下进行它。

人们实际使用的宽度的快速参考:

宽度 范围(签名) −1 的十六进制 最负值
8位元 −128 至 127 FF 80 (−128)
16位元 −32,768 至 32,767 FFFF 8000
32位元 −2,147,483,648 至 2,147,483,647 FFFFFFFF 80000000
64位元 ±9.22 × 10¹8 FFFFFFFFFFFFFFFF 8000000000000000

注意每一行的不对称性:负值比正值多一个,因为零占据正面的槽,那是经典溢出错误的来源,其中否定最负整数会返回自身,如果您想看到直接布局的值或字符串的位, 二进制翻译 是这方面的配套工具。

36号基地是干嘛的?

Base 36看起来像一个好奇心,实际上是"奇异"base中最实际有用的,原因之一是:它是最密集的数字表示法,通过案例折叠、由人类键入并丢弃到 URL 中而不逃逸。

64 位值跨基数比较相同:

基地 64 位值所需的数字 例子
二进制 (2) 64绔 涔诲芥澶澧 1111...
小数 (10) 20绔 涔诲芥澶澧 18446744073709551615
十六进制 (16) 16绔 涔诲芥澶澧 FFFFFFFFFFFFFFFF
36号基地 13绔 涔诲芥澶澧 3W5E11264SGSF
62号基地 11绔 涔诲芥澶澧 区分大小写

Base 36 讓你在六角形上存 35%,在十進制上存 35%,只使用在 URL 路徑中安全、在文件名中安全、在手機上無歧義、無論使用者是否大寫都相同的字符,這就是它顯示在短鏈接 ID、發票號碼、優惠券代碼、訂單參考和緊湊時間戳中的原因。 Date.now().toString(36) 是生成短的、可排序的、人类类型的 ID 的常见技巧。

权衡是易读性: 3W5E11264SGSF 不是你可以用十六进制的方式来进行结构化的东西,也没有干净的位对齐,因为36不是二的幂,当数字是不透明的标识符,目标紧凑时使用基数36。当数字's位结构是点时使用十六进制。

常见用例

调试内存和十六进制转储。 您的调试器显示 0x7FFE4A3C,你的日志显示 2147330620的, 而且要知道是不是同一个地址, 粘贴一个, 读取另一个。

文件权限。755 从八进制到二进制,请参阅 111 101 101的,这正是模式字段定义它们的顺序中的九个权限位,这是向某人解释原因的最快方法 chmod 644chmod 664 相差一位组写位。

颜色值。 #FF5733 是三个字节:红色255,绿色87,蓝色51。将六角形颜色分成十进制分量是每次两位六位数的转换。对于完整的工作流程 - 调色板,对比度,格式转换 - the 颜色选择器 端到端地处理它,但底层算术正是这样。

位掩码和标志。 旗帜字段 0b001011000x2C 和十进制44。当你检查哪些标志被设置时,二进制是唯一可读的形式;当你把常量写成代码时,十六进制是。你需要两者,不断。

网络和协议工作。 Subnet 掩码、MAC 地址、IPv6 组、协议号和校验和在规格中都是十六进制或二进制,在工具的一半中都是十进制,特别是 IP 地址八位字节在虚线符号中是十进制,在触摸掩码的那一刻也是二进制。

哈希值和标识符。SHA-256 输出是 64 个十六进制字符 - 256 位,32 字节。将其转换为十进制会产生一个 78 位数字,而这正是每个天真的转换器中断的地方,因为它大约比安全整数上限大 10^25 倍。如果您生成的是那些哈希而不是转换它们,则 哈希发生器 生产他们的客户端。

面试和课程作业问题。 基本转换是 CS 基本原理的主要内容,并且具有同时显示所有四个公共基本基础中的值的参考实现(通过位计数)使得检查您自己的工作变得很快。

基本比较一目了然

基地 名称 数字 每位数字位数 你在哪里看到的
2 二进制 0-1 1 位掩码、标志、硬件寄存器
8 八进制 0-7 3 Unix 文件权限, 遗留的 C 字面
10 十进制 0-9 ~3.32 人类所写的一切
16绔 涔诲芥澶澧 十六进制 0-9,AF 4锛屽湪娴欐睙鏉 内存地址、颜色、哈希值、字节
32绔 涔诲芥澶澧 32号基地 0-9,AV 5锛屽湪娴欐睙鏉 紧凑的区分大小写编码
36绔 涔诲芥澶澧 36号基地 0-9,az ~5.17 简短的 ID、发票代码、URL 安全号码

"位数/位数"列解释了整个表。二次方(2,8,16,32)的基数每位数有整数位数,这意味着数字映射到没有进位跨越边界的位组上 - 这就是使六进制二进制成为查找而不是计算的原因。非二次方(10,36)的基数每位数有分数位数,这就是为什么将十进制转换为二进制真正需要算术并且不能通过替换来完成。

相同的输入字符串可以是具有完全不同值的多个基数中的合法数字。 101 是好记在心里:

读作 价值
二进制 5锛屽湪娴欐睙鏉
八进制 65绔 涔诲芥澶澧
十进制 101
十六进制 257绔 涔诲芥澶澧
36号基地 1,297

5个数字,一个字符串,底数不是显示偏好- 它是数据的一部分,本文中的每个bug都来自某个忘记写下来的地方。

为了更广泛地了解哪些基于浏览器的实用程序值得触手可及,我收集了我每天使用的实用程序 web开发人员's工具包

常问问题

如何将十进制转换为二进制?

2反复除以数,从最后到第一个读取余数,对于42:42÷2 = 21余数0,21÷2 = 10余数1,10÷2 = 5余数0,5÷2 = 2余数1,2÷2 = 1余数0,1÷2 = 0余数1。自下而上读取余数给出101010,转换器在BigInt算术中运行这个,因此对于远远超出袖珍计算器可以容纳的任何值的值,它都保持精确。

如何将十六进制转换为十进制?

16个十六进制数字乘以16, 升到它的位置的次方, 从右边的零数起, 再把乘积加起来, FF是(15 × 16)+15 = 255,1A3是(1 × 256)+(10 × 16)+3 = 419, 设置源底为16, 贴上带或不带0x前缀的值, 小数立即出现。

如何将二进制转换为十六进制?

4的二进制数字分组为零点,从右边开始,将每个零点映射到单个十六进制数字,11111111分成1111和1111,它们是F和F,所以答案是FF,分组工作是因为16是2的四次方,所以一个十六进制数字恰好编码四位,并且没有进位曾经跨越过一个群边界,这就是为什么十六进制用于字节的原因:一个字节总是恰好是两个十六进制数字。

为什么程序员使用十六进制而不是十进制?

因为十六进制可以干净地映射到二进制和十进制上,但不是。一个十六进制数字恰好是四位,一个字节恰好是两个十六进制数字,因此 0xFF 显然是一个完整的字节,而 0xDEADBEEF 显然是四个字节。十进制给你没有这样的结构:关于 255 的任何内容都不会宣布它填充一个字节。十六进制保持位布局可读,同时是原始二进制长度的四分之一。

这个转换器可以处理非常大的数字吗?

是的。每个值都逐位解析为 BigInt,因此没有任何大小的 2^53 天花板和浮点四舍五入。 256 位哈希值、完整的 RSA 模量或 500 位十进制精确转换。基于 parseInt 或 9,007,199,254,740,991 以上默默损坏值的转换器或数字,这正是错误最难发现的范围。

2个's补码支持负数和?

负值用前导减号支持和渲染,这是符号-幅度符号。Two's补码故意不应用,因为它是固定宽度寄存器的属性,而不是数字的属性:−1是8位中的FF,16位中的FFFF,32位中的FFFFFFF。要产生two's补码模式,将你选择的宽度的幂加2到负值,并将结果转换为-对于8位中的−42,256 − 42 = 214,即十六进制中的D6。

36进制是干嘛用的?

36进制使用数字0-9后跟字母A-Z,使其成为你可以从大小写不敏感的ASCII字母数字构建的最密集的数字表示法,它产生短的、URL安全的、大小写不敏感的字符串,这就是为什么它出现在短链接ID、发票代码、优惠券代码和紧凑的时间戳中,一个64位的值需要13个36进制字符,而不是20个十进制数字或16个十六进制数字。

位长度和字节长度是什么意思?

Bit length 是值中有效位数's 大小,忽略前导零:255 的位长为 8,256 的位长为 9,字节长度是四舍五入到下一个八的倍数的图形,它们一起告诉你该值适合的最小整数类型,这通常是有人首先将一个数字转换为二进制的实际原因。

当我转换号码时,我的数据是否已发送到服务器?

No。Every转换都是在浏览器中用JavaScript计算的,这就是为什么每次按键的结果更新而不是在网络往返之后。您输入的任何内容都不会被传输、记录或存储,并且一旦页面加载,转换器就一直工作,根本没有网络连接。

Frequently Asked Questions

Divide the number by 2 repeatedly and read the remainders from last to first. For 42: 42÷2 = 21 remainder 0, 21÷2 = 10 remainder 1, 10÷2 = 5 remainder 0, 5÷2 = 2 remainder 1, 2÷2 = 1 remainder 0, 1÷2 = 0 remainder 1. Reading the remainders bottom-up gives 101010. The converter runs this in BigInt arithmetic, so it stays exact for values far beyond anything a pocket calculator can hold.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!