1
0
Fork 0
mirror of https://github.com/tailix/libkernaux.git synced 2026-08-15 11:00:07 -04:00

Improve func "kernaux_utoa"

This commit is contained in:
Alex Kotov 2022-01-24 07:32:11 +05:00
parent 29c5c50f71
commit 2c140b8dae
Signed by: kotovalexarian
GPG key ID: 553C0EBBEB5D5F08

View file

@ -11,19 +11,14 @@
static char *kernaux_utoa(uint64_t value, char *buffer, int base)
{
switch (base) {
case 'b': base = 2; break;
case 'o': base = 8; break;
case 'd': base = 10; break;
case 'h':
case 'x':
base = 16;
break;
case 'H':
case 'X':
base = -16;
break;
case 'b': case 'B': base = 2; break;
case 'o': case 'O': base = 8; break;
case 'd': case 'D': base = 10; break;
case 'h': case 'x': base = 16; break;
case 'H': case 'X': base = -16; break;
}
// Uppercase
char alpha = 'a';
if (base < 0) {
alpha = 'A';
@ -32,19 +27,18 @@ static char *kernaux_utoa(uint64_t value, char *buffer, int base)
KERNAUX_ASSERT_RETVAL(base >= 2 && base <= 36, NULL);
// Write to buffer
char *pos = buffer;
if (value == 0) *(pos++) = '0';
while (value > 0) {
const char mod = value % base;
*(pos++) = mod < 10 ? mod + '0' : mod - 10 + alpha;
value = value / base;
value /= base;
}
char *const result = pos;
*(pos--) = '\0';
// Reverse buffer
while (buffer < pos) {
const char tmp = *buffer;
*(buffer++) = *pos;