gpt4 book ai didi

c - 将人类可读的大小(k、M、G、T)解析为 C 中的字节

转载 作者:行者123 更新时间:2023-11-30 20:49:26 25 4
gpt4 key购买 nike

我正在寻找一种快速方法来将人类可读的字节大小(例如:100、1k、2M、4G)解析为字节值。输入是 char * ,输出必须是 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++)
  • 仅使用标准库(或至少常用)库(例如 sscanfatoi)

代码预计每次程序执行只运行几次,因此较小的可读代码比较长的高性能代码更受青睐。

最佳答案

这是一个可能的实现。包含检测所有错误的代码;如果您愿意,请填写您自己的处理方式来代替 goto

char *endp = s;
int sh;
errno = 0;
uintmax_t x = strtoumax(s, &endp, 10);
if (errno || endp == s) goto error;
switch(*endp) {
case 'k': sh=10; break;
case 'M': sh=20; break;
case 'G': sh=30; break;
case 0: sh=0; break;
default: goto error;
}
if (x > SIZE_MAX>>sh) goto error;
x <<= sh;

关于c - 将人类可读的大小(k、M、G、T)解析为 C 中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com