硬盘容量对不上
新买一块标称 2TB 的移动硬盘,插上电脑只显示 1.81TB。卖家说是正常损耗,买家怀疑是二手翻新。用本工具分别按 1000 进制(2TB = 2,000,000,000,000 字节)和 1024 进制(2TiB = 2,199,023,255,552 字节)算出理论容量,再对比电脑显示的 1.81TB(其实是 1.81TiB),立刻确认是厂商用 1000 进制标容量、系统用 1024 进制显示导致的差异,省去退货扯皮。
硬盘标称 1TB,电脑里显示 931GB——这个差值来自厂商用 1000 进制、系统用 1024 进制。输入数字并选择单位(bit 到 TB,两种进制均可选),工具同时给出换算结果和对应的二进制/十进制数值。所有计算在浏览器内完成,不上传任何数据。
新买一块标称 2TB 的移动硬盘,插上电脑只显示 1.81TB。卖家说是正常损耗,买家怀疑是二手翻新。用本工具分别按 1000 进制(2TB = 2,000,000,000,000 字节)和 1024 进制(2TiB = 2,199,023,255,552 字节)算出理论容量,再对比电脑显示的 1.81TB(其实是 1.81TiB),立刻确认是厂商用 1000 进制标容量、系统用 1024 进制显示导致的差异,省去退货扯皮。
摄影工作室要买 5TB 云存储年套餐,但服务商按 1000 进制计费,本地素材按 1024 进制统计。本地素材总大小 4.2TiB,用本工具换算成 4.62TB,发现买 5TB 套餐刚好够用半年,而非预想的 4TB 套餐。避免了因进制差异买错档位、半年后被迫加价扩容的被动局面。
B 站 UP 主上传 4K 视频,平台限制单文件 8GB。剪辑软件显示码率 50Mbps,时长 22 分钟。用本工具计算:50Mbps × 22 × 60 ÷ 8 = 8,250MB ≈ 8.06GB,超限 60MB。将码率降到 48Mbps 后重算为 7.92GB,刚好压线通过,省去反复导出测试的时间。
运维收到服务器磁盘告警:/var/log 分区使用率 95%,剩余 1.2GB。日志轮转策略按 500MB 切分,当前有 24 个日志文件。用本工具算出 24 × 500MB = 12,000MB = 11.72GB,对比分区总容量 15GB,确认是日志堆积而非误报。再计算清理 7 天前的 8 个文件可释放 4GB,正好回到安全水位。
嵌入式工程师选型 Flash 芯片,规格书写 256Mb(兆位),项目需求是 32MB(兆字节)。用本工具换算:256Mb ÷ 8 = 32MB,刚好满足。另一颗芯片标 512Mb,但数据手册写 64M×8,需要确认是 512Mbit 还是 512MByte。用工具分别按两种解释算出 64MB 和 512MB,对比引脚封装判断出是 64MB,避免因位/字节混淆烧错料。
| 维度 | 本工具 | 竞品 A(在线转换站) | 传统方法(手动计算) |
|---|---|---|---|
| 隐私 | 数据在浏览器内处理,不上传服务器 | 需上传文件至云端,存在隐私泄露风险 | 完全离线,无数据外传 |
| 离线可用 | 首次加载后断网仍可用 | 必须联网 | 无需网络 |
| 大小限制 | 无文件大小上限,仅受浏览器内存限制 | 常见限制 10-100 MB,大文件需付费 | 无上限,受计算工具限制 |
| 单位覆盖 | bit / B / KB / MB / GB / TB,支持 1000 和 1024 两种进制 | 通常只支持 1024 进制,缺少 bit 和 TB | 需手动查表或记公式,易出错 |
| 速度 | 输入即出,毫秒级响应 | 上传 + 处理 + 下载,耗时数秒至数十秒 | 依赖计算器或笔算,数秒至数分钟 |
| 注册要求 | 无需注册,打开即用 | 部分功能需注册或登录 | 无注册要求 |
| 收费 | 完全免费 | 基础免费,高级功能或大文件需付费 | 免费(但需自备计算工具) |
| 输入 | 输出 | 说明 |
|---|---|---|
| 1024 KB → MB | 0.9765625 MB(1024进制) / 1.024 MB(1000进制) | 常规:1MB的两种定义边界,验证工具是否同时支持二进制和十进制换算 |
| 1 GB → MB | 1024 MB(1024进制) / 1000 MB(1000进制) | 常规:最常用的大单位换算,用户常混淆两种标准 |
| 0 bit → B | 0 B | 边界:零值输入,验证工具不返回空串或报错 |
| 8 bit → B | 1 B | 边界:最小整数倍换算,1字节=8位的经典场景 |
| 1 TB → GB | 1024 GB(1024进制) / 1000 GB(1000进制) | 边界:存储行业最大常用单位,硬盘厂商用1000进制,操作系统用1024进制 |
| 1.5 GB → MB | 1536 MB(1024进制) / 1500 MB(1000进制) | 易错:小数输入,用户常误以为1.5GB=1500MB(实际二进制下是1536MB) |
| 0.5 KB → B | 512 B(1024进制) / 500 B(1000进制) | 易错:小于1单位的十进制小数,两种进制结果差异明显 |
1.混淆 bit 与 Byte 的换算关系
1 MB = 8,000,000 bit1 MB = 8,000,000 bit (十进制) 或 1 MB = 8,388,608 bit (二进制)bit 是信息最小单位,Byte 是 8 个 bit。MB 与 bit 的换算必须乘以 8,且需先明确使用 1000 还是 1024 进制,否则结果差 5%。
2.混用 1000 进制与 1024 进制单位
硬盘标称 500 GB,系统显示 465 GB,认为硬盘缩水硬盘厂商用 1 GB = 1,000,000,000 字节(十进制),操作系统用 1 GB = 1,073,741,824 字节(二进制)IEC 标准区分 GB(十进制)与 GiB(二进制)。硬盘厂商、网络带宽常用十进制,内存、文件系统常用二进制。换算时需确认上下文。
3.KB 与 KiB 的符号误写
将 1024 字节记为 1 KB1024 字节应记为 1 KiB(Kibibyte),1 KB(Kilobyte)是 1000 字节IEC 80000-13 标准规定:KB 是 10³ = 1000,KiB 是 2¹⁰ = 1024。混写会导致 2.4% 误差,在 TB 级别误差可达数十 GB。
4.网络速率单位误读
100 Mbps 宽带下载速度应为 100 MB/s100 Mbps 宽带理论最大下载速度约为 12.5 MB/s网络速率通常以 bit 为单位(Mbps = Megabits per second),而下载速度常以 Byte 为单位(MB/s)。100 Mbps ÷ 8 = 12.5 MB/s。
5.二进制换算时忘记 2¹⁰ = 1024 而非 1000
1 GB = 1000 MB(二进制场景)1 GiB = 1024 MiB(二进制场景)二进制每级进率是 1024(2¹⁰),不是 1000。1 GiB = 1024 MiB = 1,048,576 KiB。误用 1000 会导致每级误差 2.4%,多级累计显著。
6.TB 与 TiB 在存储容量上的混淆
4 TB 硬盘实际容量应为 4,000,000,000,000 字节4 TB 硬盘标称容量为 4,000,000,000,000 字节(十进制),操作系统显示约 3.64 TiB硬盘厂商用十进制 TB,操作系统用二进制 TiB 显示。4 TB 十进制 = 4×10¹² 字节,换算成二进制为 4×10¹² ÷ 2⁴⁰ ≈ 3.64 TiB。
7.小单位换算时忽略前缀定义
1 KB = 1024 字节,所以 1 MB = 1,048,576 字节1 KB = 1000 字节(十进制),1 MB = 1,000,000 字节;或 1 KiB = 1024 字节,1 MiB = 1,048,576 字节前缀 k、M、G 在十进制中分别是 10³、10⁶、10⁹;在二进制中分别是 2¹⁰、2²⁰、2³⁰。混用前缀定义会导致整个换算链出错。
8.文件大小与内存容量的单位混用
内存 8 GB 与文件大小 8 GB 使用同一进制内存容量通常使用二进制(8 GiB),文件大小取决于文件系统(常为二进制)内存寻址天然基于 2 的幂,所以 DDR 内存容量总是二进制。文件系统如 NTFS 也使用二进制,但硬盘厂商用十进制。同一数值在不同场景含义可能不同。
B = 8 × b
B字节数,单位 Byteb比特数,单位 bit一个网络数据包大小为 4096 bit,转换为字节:B = 8 × 4096 = 32768 Byte,即 32 KB(按 1024 进制)。
5 种主流语言实现,复制即用:
def convert_storage(value: float, from_unit: str, to_unit: str, base: int = 1000) -> float:
"""
存储单位换算,支持 bit / B / KB / MB / GB / TB
base=1000 或 1024
"""
units = ['bit', 'B', 'KB', 'MB', 'GB', 'TB']
if from_unit not in units or to_unit not in units:
raise ValueError(f"单位必须是 {units}")
from_idx = units.index(from_unit)
to_idx = units.index(to_unit)
# 先统一转成字节
if from_unit == 'bit':
bytes_val = value / 8
else:
bytes_val = value * (base ** (from_idx - 1))
# 再转目标单位
if to_unit == 'bit':
return bytes_val * 8
else:
return bytes_val / (base ** (to_idx - 1))
# 示例:1 GB(1000进制)转 MB
print(convert_storage(1, 'GB', 'MB', 1000)) # 输出 1000.0
# 示例:1 GiB(1024进制)转 MiB
print(convert_storage(1, 'GB', 'MB', 1024)) # 输出 1024.0function convertStorage(value, fromUnit, toUnit, base = 1000) {
const units = ['bit', 'B', 'KB', 'MB', 'GB', 'TB'];
const fromIdx = units.indexOf(fromUnit);
const toIdx = units.indexOf(toUnit);
if (fromIdx === -1 || toIdx === -1) throw new Error('Invalid unit');
// 统一转字节
let bytes;
if (fromUnit === 'bit') {
bytes = value / 8;
} else {
bytes = value * Math.pow(base, fromIdx - 1);
}
// 转目标单位
if (toUnit === 'bit') {
return bytes * 8;
} else {
return bytes / Math.pow(base, toIdx - 1);
}
}
console.log(convertStorage(1, 'GB', 'MB', 1000)); // 1000
console.log(convertStorage(1, 'GB', 'MB', 1024)); // 1024package main
import (
"fmt"
"math"
"strings"
)
func convertStorage(value float64, fromUnit, toUnit string, base int) (float64, error) {
units := []string{"bit", "B", "KB", "MB", "GB", "TB"}
fromIdx := -1
toIdx := -1
for i, u := range units {
if u == fromUnit {
fromIdx = i
}
if u == toUnit {
toIdx = i
}
}
if fromIdx == -1 || toIdx == -1 {
return 0, fmt.Errorf("invalid unit")
}
var bytes float64
if fromUnit == "bit" {
bytes = value / 8
} else {
bytes = value * math.Pow(float64(base), float64(fromIdx-1))
}
if toUnit == "bit" {
return bytes * 8, nil
}
return bytes / math.Pow(float64(base), float64(toIdx-1)), nil
}
func main() {
result, _ := convertStorage(1, "GB", "MB", 1000)
fmt.Println(result) // 1000
result, _ = convertStorage(1, "GB", "MB", 1024)
fmt.Println(result) // 1024
}#!/usr/bin/env bash
# 存储单位换算(bash 浮点运算用 bc)
# 用法: ./convert.sh <value> <from_unit> <to_unit> <base>
# 示例: ./convert.sh 1 GB MB 1000
value=$1
from=$2
to=$3
base=${4:-1000}
# 单位索引映射(bit=0, B=1, KB=2, MB=3, GB=4, TB=5)
idx_from=$(echo "0")
case $from in
bit) idx_from=0 ;;
B) idx_from=1 ;;
KB) idx_from=2 ;;
MB) idx_from=3 ;;
GB) idx_from=4 ;;
TB) idx_from=5 ;;
*) echo "Invalid unit"; exit 1 ;;
esac
idx_to=$(echo "0")
case $to in
bit) idx_to=0 ;;
B) idx_to=1 ;;
KB) idx_to=2 ;;
MB) idx_to=3 ;;
GB) idx_to=4 ;;
TB) idx_to=5 ;;
*) echo "Invalid unit"; exit 1 ;;
esac
# 统一转字节
if [ "$from" = "bit" ]; then
bytes=$(echo "scale=10; $value / 8" | bc)
else
exp=$(( idx_from - 1 ))
bytes=$(echo "scale=10; $value * ($base ^ $exp)" | bc)
fi
# 转目标单位
if [ "$to" = "bit" ]; then
result=$(echo "scale=10; $bytes * 8" | bc)
else
exp=$(( idx_to - 1 ))
result=$(echo "scale=10; $bytes / ($base ^ $exp)" | bc)
fi
echo "$result"fn convert_storage(value: f64, from_unit: &str, to_unit: &str, base: i32) -> Result<f64, String> {
let units = vec!["bit", "B", "KB", "MB", "GB", "TB"];
let from_idx = units.iter().position(|&u| u == from_unit).ok_or("Invalid from_unit")?;
let to_idx = units.iter().position(|&u| u == to_unit).ok_or("Invalid to_unit")?;
let base = base as f64;
// 统一转字节
let bytes = if from_unit == "bit" {
value / 8.0
} else {
value * base.powi((from_idx - 1) as i32)
};
// 转目标单位
let result = if to_unit == "bit" {
bytes * 8.0
} else {
bytes / base.powi((to_idx - 1) as i32)
};
Ok(result)
}
fn main() {
println!("{}", convert_storage(1.0, "GB", "MB", 1000).unwrap()); // 1000
println!("{}", convert_storage(1.0, "GB", "MB", 1024).unwrap()); // 1024
}这是厂商和操作系统使用的进制不同造成的。硬盘厂商按 1TB = 1000GB(十进制)标称,但 Windows 等系统按 1TB = 1024GB(二进制)计算,所以 1000GB ÷ 1.024 ≈ 976.56GB,再扣除文件系统开销后显示 931GB 是正常现象。本工具支持在“1000 进制”和“1024 进制”间切换,可以分别算出两种值,方便对比差异。
本工具只做单位换算,不做压缩计算。不过你可以用它先算出目标大小对应的比特率:比如视频时长 10 分钟(600 秒),目标 200MB = 200 × 8 = 1600Mb,比特率 = 1600 ÷ 600 ≈ 2.67Mbps。这个结果可以给压缩软件(如 HandBrake)作为参考值。注意压缩后画质会下降,建议先试压一段看看效果。
因为文件系统的最小分配单元(簇)不同,以及固件包内包含元数据(校验和、分区表等)。例如 FAT32 的簇大小是 4KB,大量小文件会导致每个文件至少占用 4KB,实际占用空间远大于文件本身大小。本工具算的是“文件内容大小”,不是磁盘占用空间。若需精确了解占用,需查看操作系统中的“占用空间”属性。
两个都对,只是标准不同。2048MB 是二进制换算(1GB=1024MB),常用于内存、操作系统报告;2000MB 是十进制换算(1GB=1000MB),常用于硬盘、U 盘标称和网络带宽。本工具同时显示两种结果,方便你在不同场景下取用。比如买内存时看二进制值,买硬盘时看十进制值。
支持。输入框可以接受小数,例如 1.5GB,结果区会同时给出 1500MB(十进制)和 1536MB(二进制)。注意不要带多余空格或单位简写错误(如写成 1.5G 会识别为 1.5GB,但 1.5Gb 是小写 b,表示比特而非字节,结果会差 8 倍)。如果不确定输入格式,参考输入框下方提示的示例。
因为 1024KB 在二进制下正好是 1MB,在十进制下是 1024 ÷ 1000 = 1.024MB,反过来 1MB(十进制)= 1000KB,所以 1024KB 十进制显示为 1.024MB。本工具默认将输入的数值按你选择的进制解释。如果你输入 1024KB 且当前进制是二进制,结果区会显示“1MB(二进制)/ 1.024MB(十进制)”,两个值都标明了对应的进制。
可以。输入框支持的单位包含 bit、B、KB、MB、GB、TB,并且区分大小写:小写 b 表示比特(bit),大写 B 表示字节(Byte)。例如输入 8bit 会显示 1B。注意网络带宽常用 bps(比特/秒),下载速度常用 B/s(字节/秒),8:1 的换算关系是本工具最常用的场景之一。
KiB(Kibibyte)是国际电工委员会(IEC)制定的二进制前缀,1KiB = 1024B;KB(Kilobyte)是国际单位制(SI)十进制前缀,1KB = 1000B。本工具默认使用十进制(KB/MB/GB),但可以在设置中切换为二进制前缀(KiB/MiB/GiB)。如果你的工作涉及内存寻址、Linux 系统 df 命令输出等,建议用二进制模式。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。