From eb144691789b3361db549d0984b2d7a25f92c8a2 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Mon, 31 Jul 2023 11:43:25 +0200 Subject: [PATCH] Create utility function for formatting bytes Byte count to prettified representation as string. --- r5dev/public/tier0/utility.h | 1 + r5dev/tier0/utility.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/r5dev/public/tier0/utility.h b/r5dev/public/tier0/utility.h index db25e910..8c983f12 100644 --- a/r5dev/public/tier0/utility.h +++ b/r5dev/public/tier0/utility.h @@ -82,6 +82,7 @@ void PrintM128i64(__m128i in); void AppendPrintf(char* pBuffer, size_t nBufSize, char const* pFormat, ...); string PrintPercentageEscape(const string& svInput); +string FormatBytes(size_t nBytes); string FormatV(const char* szFormat, va_list args); string Format(const char* szFormat, ...); diff --git a/r5dev/tier0/utility.cpp b/r5dev/tier0/utility.cpp index cf7b5698..63aa39ac 100644 --- a/r5dev/tier0/utility.cpp +++ b/r5dev/tier0/utility.cpp @@ -987,6 +987,18 @@ string PrintPercentageEscape(const string& svInput) return result; } +/////////////////////////////////////////////////////////////////////////////// +// For formatting a STL string to a prettified representation of input bytes. +string FormatBytes(size_t nBytes) +{ + char szBuf[128] = ""; + const char* szPrefix[] = { "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB" }; + const int iBase = 1024; + size_t c = (std::min)((size_t)(log((double)nBytes) / log((double)iBase)), (size_t)sizeof(szPrefix) - 1); + sprintf(szBuf, "%1.2lf %s", nBytes / pow((double)iBase, c), szPrefix[c]); + return string(szBuf); +} + /////////////////////////////////////////////////////////////////////////////// // For formatting a STL string using C-style format specifiers (va_list version). string FormatV(const char* szFormat, va_list args)