IP子网掩码换算
网络工程师在配置 VLAN 时,需要将 192.168.1.0/27 的子网掩码从十进制点分格式(255.255.255.224)换算为十六进制(0xFFFFFFE0)写入交换机 ACL。手动逐位换算容易在借位时写错,导致整个子网不可达。用本工具将 255.255.255.224 转为十六进制,同时校验二进制位是否连续,确保策略下发前掩码无误。
调试串口协议时,一个十六进制0x1F换算成二进制是00011111还是00011110,手算容易错,尤其带负数的浮点数。这个工具在输入框打下数字和进制,即时出2、8、10、16及任意2-36进制结果,负数与浮点同样处理。所有运算在浏览器本地完成,无数据上传,适合嵌入式开发、网络工程或计算机教学现场核对。
网络工程师在配置 VLAN 时,需要将 192.168.1.0/27 的子网掩码从十进制点分格式(255.255.255.224)换算为十六进制(0xFFFFFFE0)写入交换机 ACL。手动逐位换算容易在借位时写错,导致整个子网不可达。用本工具将 255.255.255.224 转为十六进制,同时校验二进制位是否连续,确保策略下发前掩码无误。
自动化工程师从三菱 FX3U 系列 PLC 的程序中读到一段十六进制数据 D100 = 0x0F3C,需要转换为十进制 3900 来比对传感器量程。手算时把 0xF3C 误读为 0xFC3,导致量程超限报警误判。本工具支持 2/8/10/16 进制互转,输入 0x0F3C 直接得到 3900,避免高位错位。
嵌入式开发者在调试 STM32 的 ADC 采样值时,串口输出的是十六进制浮点表示 0x447A0000,需要确认其对应的十进制是否为 1000.0。用本工具将该 32 位十六进制数按 IEEE 754 单精度解析,得到浮点值 1000.0,验证了 SPI 传输中字节序没有反转。
学生在学习《计算机组成原理》时,作业要求将 -128 的 8 位补码(0x80)转换为原码。按常规取反加一操作得到 0x100,但 8 位寄存器无法容纳进位。用本工具输入 -128 并指定 8 位输出,直接显示补码 0x80 且提示溢出,帮助学生理解补码表示的范围边界。
安全运维人员在生成 32 位 WPA2 预共享密钥时,要求密钥仅包含数字和大小写字母(36 进制字符集)。用本工具将随机数种子(十进制)转换为 36 进制字符串,得到 0-9A-Z 组成的密钥,避免手动挑选字符时遗漏或重复,且不经过任何在线服务器,密钥仅在本地浏览器中计算。
| 维度 | 本工具 | 竞品 A(在线进制转换站) | 传统方法(手动计算 / 计算器) |
|---|---|---|---|
| 负数支持 | 直接输入负号,支持负进制转换 | 多数仅正整数,负号报错或忽略 | 需手动处理补码或符号位 |
| 浮点数 | 直接输入小数,保留精度转换 | 仅整数,小数报错或截断 | 需分整数/小数部分分别计算后拼接 |
| 任意进制 | 2-36 进制任意输入输出(含自定义进制) | 固定 2/8/10/16,无自定义 | 进制 >16 需自编转换表 |
| 隐私 | 全部在浏览器本地计算,不上传数据 | 数据发往服务器处理 | 完全离线,无隐私风险 |
| 速度 | 毫秒级即时响应(纯前端) | 依赖网络,有 0.5-2 秒延迟 | 依赖计算能力,复杂进制需数分钟 |
| 操作步骤 | 输入数值→选进制→出结果,共 3 步 | 需选方向(X进制→Y进制),步骤多 1 步 | 需查表/写公式/多次计算,至少 5 步 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 255(十进制 → 十六进制) | FF | 常规:一字节最大值,验证基本换算 |
| 0(十进制 → 二进制) | 0 | 边界:零的处理,很多实现会错成空串 |
| -10(十进制 → 十六进制) | -A(符号位保留) | 易错:负数各工具口径不一,本工具保留负号,不转补码 |
| 3.14(十进制 → 二进制) | 11.001000111101011100001010001111010111000010100011111 | 边界:浮点数转换,展示有限精度,非无限循环 |
| 1A(十六进制 → 十进制) | 26 | 常规:带字母的十六进制输入,验证字母大小写兼容 |
| 11111111(二进制 → 八进制) | 377 | 常规:8位二进制最大值转八进制,验证分组转换 |
| Z(任意进制 → 十进制,基数为36) | 35 | 边界:36进制最大数字符,验证任意进制上限 |
| -0.5(十进制 → 八进制) | -0.4 | 易错:负浮点数转换,验证符号与小数部分同时处理 |
1.负数输入时误用全角负号
-15(全角短横)-15(半角减号)全角负号(U+FF0D)与半角减号(U+002D)编码不同,解析器只识别半角,导致被当作非法字符。
2.浮点进制转换时直接截断小数位
十进制 0.1 转二进制,手动写 0.0001(截断)0.00011001100110011001101(循环)0.1 在二进制中是无限循环小数,截断会引入误差。工具内部用高精度浮点或分数表示,手动截断结果不精确。
3.任意进制输入中混入超出基数的数字
基数 3 的进制里输入 123(含数字 3)基数 3 的进制里输入 122(最大数字 2)任意进制(如三进制)每位数字必须小于基数(0~2)。输入 3 会被解析器当作非法字符或自动忽略,导致转换结果错误。
4.十六进制中误用字母 O 代替数字 0
十六进制 1O(字母 O)十六进制 10(数字 0)十六进制数字只有 0-9 和 A-F。字母 O 不在合法字符集内,解析器会报错或跳过,结果与预期完全不同。
5.二进制输入中混入空格或分隔符
1010 0101(中间有空格)10100101(连续无空格)工具输入框默认不处理空格,空格会被当作非法字符。若需分组可先输入再手动删除空格,或使用工具自带的分组功能(如有)。
6.负数与浮点同时输入时符号位置错误
10.5-(负号在末尾)-10.5(负号在开头)数值表示规范中负号必须位于数字最前面。末尾负号不符合任何进制解析规则,会被当作非法字符或忽略。
7.转换目标进制时误用小数基数值
想转八进制,输入基数 8.0输入基数 8(整数)基数必须是整数(2~36 或自定义范围),浮点基数无意义。输入 8.0 可能被截断为 8 或直接报错,取决于解析实现。
N = sum_{i=0}^{n-1} d_i × B^i
N十进制数值B目标进制,如 2/8/10/16d_i第 i 位数字,0 ≤ d_i < Bn整数部分位数将十进制 255.625 转为十六进制:整数部分 255 ÷ 16 = 15 余 15 → 0xFF;小数部分 0.625 × 16 = 10.0 → 0.A;合并为 0xFF.A。验证:15×16¹ + 15×16⁰ + 10×16⁻¹ = 240 + 15 + 0.625 = 255.625。
5 种主流语言实现,复制即用:
import struct
def any_base_to_decimal(num_str: str, base: int) -> int:
"""将任意进制字符串(2-36)转为十进制整数,支持负数"""
if base < 2 or base > 36:
raise ValueError("base must be 2-36")
negative = num_str.startswith('-')
if negative:
num_str = num_str[1:]
try:
result = int(num_str, base) # int() 原生支持 2-36 进制
except ValueError as e:
raise ValueError(f"Invalid input for base {base}: {e}")
return -result if negative else result
# 示例:十六进制 'FF' -> 255
print(any_base_to_decimal('FF', 16)) # 255
# 示例:二进制 '-1010' -> -10
print(any_base_to_decimal('-1010', 2)) # -10function decimalToAnyBase(num, base) {
if (base < 2 || base > 36) throw new Error('base must be 2-36');
if (num === 0) return '0';
const negative = num < 0;
num = Math.abs(num);
const digits = '0123456789abcdefghijklmnopqrstuvwxyz';
let result = '';
while (num > 0) {
result = digits[num % base] + result;
num = Math.floor(num / base);
}
return negative ? '-' + result : result;
}
// 示例:十进制 255 -> 十六进制 'ff'
console.log(decimalToAnyBase(255, 16)); // 'ff'
// 示例:十进制 -10 -> 二进制 '-1010'
console.log(decimalToAnyBase(-10, 2)); // '-1010'package main
import (
"fmt"
"math/big"
"strings"
)
// decimalToBase 将十进制整数转为任意进制(2-62),支持负数
func decimalToBase(num int64, base int) string {
if base < 2 || base > 62 {
panic("base must be 2-62")
}
if num == 0 {
return "0"
}
negative := num < 0
if negative {
num = -num
}
const charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
var result []byte
for num > 0 {
result = append([]byte{charset[num%int64(base)]}, result...)
num /= int64(base)
}
if negative {
result = append([]byte{'-'}, result...)
}
return string(result)
}
func main() {
// 示例:十进制 255 -> 十六进制 'ff'
fmt.Println(decimalToBase(255, 16)) // 'ff'
// 示例:十进制 -10 -> 二进制 '-1010'
fmt.Println(decimalToBase(-10, 2)) // '-1010'
// 使用 big.Int 处理大数
n := new(big.Int)
n.SetString("12345678901234567890", 10)
fmt.Println(n.Text(16)) // 内置方法,支持 2-62 进制
}#!/bin/bash
# 使用 bc 进行任意进制转换(2-16 进制,支持浮点)
# 注意:bc 的 obase/ibase 需注意输入输出顺序
# 示例:十六进制 'FF' -> 十进制 255
echo "ibase=16; FF" | bc # 255
# 示例:十进制 255 -> 十六进制 'FF'
echo "obase=16; 255" | bc # FF
# 示例:二进制 '-1010.1' -> 十进制 -10.5(bc 支持浮点)
echo "ibase=2; -1010.1" | bc # -10.5
# 注意:bc 的 ibase 和 obase 默认是十进制,设置后会影响后续输入
# 更安全的做法:先设 ibase=10,再设 obase
echo "obase=16; ibase=10; 255" | bc # FFpublic class BaseConverter {
// 将十进制整数转为任意进制(2-36),支持负数
public static String decimalToBase(long num, int base) {
if (base < 2 || base > 36) {
throw new IllegalArgumentException("base must be 2-36");
}
if (num == 0) return "0";
boolean negative = num < 0;
num = Math.abs(num);
StringBuilder sb = new StringBuilder();
while (num > 0) {
long digit = num % base;
char c = (digit < 10) ? (char)('0' + digit) : (char)('a' + digit - 10);
sb.insert(0, c);
num /= base;
}
return negative ? "-" + sb.toString() : sb.toString();
}
public static void main(String[] args) {
// 示例:十进制 255 -> 十六进制 'ff'
System.out.println(decimalToBase(255, 16)); // 'ff'
// 示例:十进制 -10 -> 二进制 '-1010'
System.out.println(decimalToBase(-10, 2)); // '-1010'
// 使用 Long.toString 内置方法(支持 2-36)
System.out.println(Long.toString(255, 16)); // 'ff'
}
}本工具支持负数转换。输入 -5 后,默认输出的是带符号的二进制表示(如 -101),而非计算机内部的补码形式。如果报错,检查输入框是否有多余空格或全角符号。若需要补码结果(如 32 位下 -5 的补码是 11111111111111111111111111111011),请先选择“补码”或“有符号”模式(若工具提供该选项),或手动按“取反加一”计算。
浮点数在计算机中采用 IEEE 754 标准存储,转二进制时分为符号位、指数位和尾数位,不是简单的整数除二取余。例如 0.1 的二进制是无限循环小数 0.0001100110011...,所以显示结果末尾会有很多位。本工具按标准单精度(32 位)或双精度(64 位)输出,若只想要精确的十进制小数转二进制结果,请将小数部分单独输入并乘以 2 取整手动计算。
可以。本工具支持 2 到 36 进制之间的任意互转,包括三进制、四进制等非常用进制。输入数字时需确保数字在目标进制范围内(如三进制只能使用 0、1、2 三个字符)。例如十进制 123 转三进制:123 ÷ 3 = 41 余 0,41 ÷ 3 = 13 余 2,13 ÷ 3 = 4 余 1,4 ÷ 3 = 1 余 1,1 ÷ 3 = 0 余 1,倒序得 11120。工具会直接给出结果。
本工具接受“0x”前缀表示十六进制,但输入前请确认当前输入进制已选为“十六进制”。若输入框当前进制是默认的十进制,则“0x1A”会被当成普通字符串,导致解析失败或错误结果。正确操作:先点选“十六进制”输入模式,再输入 1A 或 0x1A(前缀可选),再点转换。若仍不对,检查是否混入了全角字母或空格。
本工具完全在浏览器本地运行(JavaScript 实现),所有计算不向服务器发送任何数据,断网后依然可以正常使用。输入的数字、转换结果都不会被记录或上传。适合处理敏感数据(如内部代码片段、密码学练习中的数值)。若页面刷新,之前的结果会丢失,建议转换后及时复制保存。
JavaScript 的 Number 类型能精确表示的整数范围是 -2^53 到 2^53(约 9007199254740992),超出此范围的大整数会丢失精度,并以科学计数法显示(如 1.23456789e+19)。本工具若未使用 BigInt 库,则对超过 16 位的十进制数字无法保证精确转换。建议将大数拆分为高位和低位分别转换,或使用支持任意精度的大数计算工具。
八进制(每 3 位二进制压缩为 1 位)在 Unix 文件权限(如 chmod 755)、早期计算机系统中常见;十六进制(每 4 位二进制压缩为 1 位)更通用,尤其在内存地址、颜色值(#FF0000)、MAC 地址、汇编指令中。日常编程和调试建议优先用十六进制,因为与字节对齐(1 字节 = 2 位十六进制),阅读和计算更直观。如果你在处理 Linux 权限或老旧系统,八进制更方便。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。