我想转换成一个单一的字节数,文件大小(有.KB,.MB和.GB)。
如果数字是0,我不想有任何单位。如果这个数字可以被1024的倍数整除(不是浮点数),那么我将打印:否则,我想打印一个精度为一度的浮点数。
我做了一些代码,看起来工作得很好,但它非常麻烦。我正在寻找方法,我可以使我的功能更干净/更有效,它是诚实的非常丑陋:
char *
calculateSize( off_t size )
{
char *result = (char *) malloc(sizeof(char) * 20);
static int GB = 1024 * 1024 * 1024;
static int MB = 1024 * 1024;
static int KB = 1024;
if (size >= GB) {
if (size % GB == 0)
sprintf(result, "%d GB", size / GB);
else
sprintf(result, "%.1f GB", (float) size / GB);
}
else if (size >= MB) {
if (size % MB == 0)
sprintf(result, "%d MB", size / MB);
else
sprintf(result, "%.1f MB", (float) size / MB);
}
else {
if (size == 0) {
result[0] = '0';
result[1] = '\0';
}
else {
if (size % KB == 0)
sprintf(result, "%d KB", size / KB);
else
sprintf(result, "%.1f KB", (float) size / KB);
}
}
return result;
}
如果有人有更好的方法来达到同样的效果,我真的很感激。
3条答案
按热度按时间dgsult0t1#
使用扩展到EiB的表驱动表示。
测试代码
测试输出
qxgroojn2#
我会用table的方法沿着下列路线的东西:
ma8fv8wu3#
一个更好的方法是:
必须释放函数的结果。