文件大小单位换算表
B / KB / KiB / MB / MiB / GB / GiB 换算速查表,可用于编写程序、核对配置值与设计测试。
SI 单位(十进制)与 IEC 单位(二进制)的区别
文件大小有两套单位体系:基于国际单位制(SI)的十进制单位,以及 IEC 制定的二进制单位。混淆 MB 与 MiB 是边界值测试失败的常见原因。
| SI 单位 | 读法 | 字节数 | IEC 单位 | 读法 | 字节数 | 差异 |
|---|---|---|---|---|---|---|
| KB | 千字节 | 1,000 | KiB | Kibibyte | 1,024 | +2.4% |
| MB | 兆字节 | 1,000,000 | MiB | Mebibyte | 1,048,576 | +4.86% |
| GB | 吉字节 | 1,000,000,000 | GiB | Gibibyte | 1,073,741,824 | +7.37% |
| TB | 太字节 | 1,000,000,000,000 | TiB | Tebibyte | 1,099,511,627,776 | +9.95% |
MB → 字节换算表
| MB(十进制) | 字节数 | MiB(二进制) | 字节数 |
|---|---|---|---|
| 0.1 MB | 100,000 B | 0.1 MiB | 104,858 B |
| 0.5 MB | 500,000 B | 0.5 MiB | 524,288 B |
| 1 MB | 1,000,000 B | 1 MiB | 1,048,576 B |
| 2 MB | 2,000,000 B | 2 MiB | 2,097,152 B |
| 5 MB | 5,000,000 B | 5 MiB | 5,242,880 B |
| 10 MB | 10,000,000 B | 10 MiB | 10,485,760 B |
| 20 MB | 20,000,000 B | 20 MiB | 20,971,520 B |
| 25 MB | 25,000,000 B | 25 MiB | 26,214,400 B |
| 50 MB | 50,000,000 B | 50 MiB | 52,428,800 B |
| 100 MB | 100,000,000 B | 100 MiB | 104,857,600 B |
| 256 MB | 256,000,000 B | 256 MiB | 268,435,456 B |
| 512 MB | 512,000,000 B | 512 MiB | 536,870,912 B |
| 1 GB | 1,000,000,000 B | 1 GiB | 1,073,741,824 B |
主要服务与工具对单位的解释
| 服务 / 配置 | 单位写法 | 实际解释 | 示例 |
|---|---|---|---|
| PHP(php.ini) | M | MiB(二进制) | 10M = 10,485,760 B |
| Nginx(client_max_body_size) | m | MiB(二进制) | 10m = 10,485,760 B |
| Apache(LimitRequestBody) | 以字节指定 | 字节(原值) | 10485760 = 10 MiB |
| Windows 资源管理器 | 显示为 MB | 按 MiB(二进制)计算 | 「9.99 MB」= 10,476,544 B |
| macOS Finder | 显示为 MB | MB(十进制) | 「10 MB」= 10,000,000 B |
| Linux(ls -lh) | M | MiB(二进制) | 10M = 10 MiB |
| Gmail 附件上限 | 25 MB | MB(十进制) | 25,000,000 B |
| AWS S3 控制台 | 显示为 MiB | MiB(二进制) | 与显示一致 |
计算公式
// JavaScript 中的换算函数
const UNITS = {
// SI(10進数)
KB: 1_000,
MB: 1_000_000,
GB: 1_000_000_000,
TB: 1_000_000_000_000,
// IEC(2進数)
KiB: 1_024,
MiB: 1_048_576,
GiB: 1_073_741_824,
TiB: 1_099_511_627_776,
};
const toBytes = (value, unit) => value * UNITS[unit];
const fromBytes = (bytes, unit) => bytes / UNITS[unit];
// 示例:把 10 MiB 换算为字节
console.log(toBytes(10, 'MiB')); // → 10485760
// 示例:把 10000000 字节换算为 MB
console.log(fromBytes(10_000_000, 'MB')); // → 10
console.log(fromBytes(10_000_000, 'MiB').toFixed(2)); // → 9.54
1_000, 'MB' => 1_000_000, 'GB' => 1_000_000_000,
'KiB' => 1_024, 'MiB' => 1_048_576, 'GiB' => 1_073_741_824,
];
return (int)($value * ($units[$unit] ?? 1));
}
echo toBytes(10, 'MiB'); // → 10485760
echo toBytes(25, 'MB'); // → 25000000
与边界值测试文件的对应
DevLab 提供了与常见上传上限对应的边界值测试文件。请根据目标系统对单位的解释选择合适的文件。
- 阈值测试文件一览 — 每个上限的略小于、恰好等于、略大于三件套
❓ 常见问题
1GB 是 1000MB 还是 1024MB?
作为 SI 前缀,GB 指 1000MB。1024MB 对应的是 GiB(吉比字节),属于二进制前缀。存储厂商按 SI 标注容量,而 Windows 把 GiB 的数值标成 GB,因此 500GB 的硬盘显示为 465GB。差距约 7%,到 TB 量级还会更大。
设置上传上限时该按哪种单位计算?
以你所配置的软件的解释为准。PHP 的 upload_max_filesize 与 nginx 的 client_max_body_size 都把 M 视为 1024×1024,实际上就是 MiB。而告诉用户「最大 10MB」时,对方理解的是 10,000,000 字节。用正好卡在边界的文件实测,让文案与实现保持一致。
网络速度的 Mbps 与文件大小的 MB 有什么区别?
小写 b 是比特,大写 B 是字节,1 字节等于 8 比特。100Mbps 的线路理论上每秒可传约 12.5MB,实际因协议开销会低约一成。因此 100MB 的文件理想值约 8 秒,现实中大致 9〜10 秒。