- sprintf(txt, "%02d:%02d:%02d.%03d", (int)hours, (int)min, (int)sec, (int)msec);
- return;
+ // Print 3 digits
+ uint64_t n = val / d;
+ if (i == 0)
+ snprintf(str, strsize, "%u B", (unsigned)n);
+ else if (n >= 100) // "123 xB"
+ snprintf(str, strsize, "%" PRIu64 " %cB", n, prefixes[i]);
+ else if (n >= 10) // "12.3 xB"
+ snprintf(str, strsize, "%" PRIu64 "%s%u %cB", n, decimal_point,
+ (unsigned)(((val % d) * 10) / d), prefixes[i]);
+ else // "1.23 xB"
+ snprintf(str, strsize, "%" PRIu64 "%s%02u %cB", n, decimal_point,
+ (unsigned)(((val % d) * 100) / d), prefixes[i]);
+
+ return str;