Skip to main content

10.进制

1. 进制转换与存储单位处理

1.1 标题

你正在开发一个文件管理工具,需要处理文件大小显示和网络下载时间计算。该工具需要支持不同进制的数据转换,并能准确处理存储单位和网络速度的单位换算。

1.2 内容

请实现以下三个函数:

1.2.1 进制转换函数

def convert_base(number_str, from_base, to_base):
"""
进制转换函数

参数:
number_str: 数字字符串
from_base: 源进制 (2-16)
to_base: 目标进制 (2-16)

返回:
转换后的数字字符串

示例:
convert_base("255", 10, 16) -> "FF"
convert_base("1010", 2, 10) -> "10"
"""

1.2.2 文件大小格式化函数

def format_file_size(size_bytes):
"""
将字节数转换为人类可读的格式

参数:
size_bytes: 文件大小(字节)

返回:
格式化后的字符串,如 "1.50 KiB"

要求:
- 使用二进制前缀 (1024进制): B, KiB, MiB, GiB, TiB
- 自动选择最合适的单位
- 保留2位小数

示例:
format_file_size(1536) -> "1.50 KiB"
format_file_size(1048576) -> "1.00 MiB"
"""

1.2.3 下载时间计算函数

def calculate_download_time(file_size_mb, bandwidth_mbps):
"""
计算文件下载所需时间

参数:
file_size_mb: 文件大小(MB)
bandwidth_mbps: 网络带宽(Mbps)

返回:
下载时间字符串,根据时间长短选择合适单位

要求:
- 正确进行单位换算(注意 Byte vs bit 的区别)
- 小于1分钟显示秒,小于1小时显示分钟,否则显示小时
- 保留1位小数

示例:
calculate_download_time(100, 50) -> "16.0 秒"
calculate_download_time(2048, 100) -> "2.7 分钟"
"""

1.2.4 测试用例

# 测试数据
test_cases = [
# 进制转换测试
("255", 10, 16), # 应输出: "FF"
("1010", 2, 10), # 应输出: "10"
("FF", 16, 2), # 应输出: "11111111"

# 文件大小测试
(500,), # 应输出: "500.00 B"
(1536,), # 应输出: "1.50 KiB"
(1048576,), # 应输出: "1.00 MiB"
(3221225472,), # 应输出: "3.00 GiB"

# 下载时间测试
(100, 50), # 应输出: "16.0 秒"
(2048, 100), # 应输出: "2.7 分钟"
(10240, 10), # 应输出: "22.8 小时"
]