我正在寻找一种将人类可读的字节大小(例如:100、1k、2M、4G)解析为字节值的快速方法。输入是 a char *
,输出必须是 a size_t
(例如,无符号,可能是 64 位或 32 位整数,具体取决于架构)。代码应该检测到无效输入并返回一个值,表明它是无效输入。
例子:
Input => size_t result
-----------------------
"100" => 100
"10k" => 10240
"2M" => 2097152
"4G" => 4294967296 on 64-bit machine, error (overflow) on 32-bit machine
"ten" => error
这是一个示例代码片段,可以扩展以处理单元前缀:
int parse_human_readable_byte_size(char *input, size_t *result) {
/* TODO: needs to support k, M, G, etc... */
return sscanf("%zu", result) == 1;
}
以下是一些额外的要求:
- 必须在 C 中完成(非 C++)
- 仅使用标准库(或至少常用的)库(例如
sscanf
,atoi
)
该代码预计每次程序执行仅运行几次,因此更小的可读代码优于更长的高性能代码。