65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
#include "header.h"
|
|
|
|
void int_to_hex_string(uint64_t value, char *out, uint8_t num_digits) { // num_digits : number of digit of the output, ex 2 for 3FF (1023) -> FF
|
|
for (uint8_t i = 0; i < num_digits; ++i) {
|
|
uint8_t shift = (num_digits - 1 - i) * 4;
|
|
out[i] = INT_TO_HEX_CHAR((value >> shift) & 0x0F);
|
|
}
|
|
out[num_digits] = '\0';
|
|
}
|
|
|
|
void int_to_string(uint64_t value, char *buffer) {
|
|
// handle zero case
|
|
if (value == 0) {
|
|
buffer[0] = '0';
|
|
return;
|
|
}
|
|
|
|
uint8_t size = -1;
|
|
uint64_t copy = value;
|
|
|
|
while (copy) {
|
|
copy /= 10;
|
|
size++;
|
|
}
|
|
|
|
while (value) {
|
|
uint8_t digit = value % 10;
|
|
buffer[size] = digit + '0';
|
|
value /= 10;
|
|
size--;
|
|
}
|
|
}
|
|
|
|
void itoa_base(uint64_t value, char *buffer, uint8_t base) { // buffer must have the right size
|
|
if (base < 2 || base > 36) {
|
|
buffer[0] = '\0'; // unsupported base
|
|
return;
|
|
}
|
|
|
|
// handle zero case
|
|
if (value == 0) {
|
|
buffer[0] = '0';
|
|
buffer[1] = '\0';
|
|
return;
|
|
}
|
|
|
|
uint8_t size = 0;
|
|
uint64_t copy = value;
|
|
|
|
while (copy) {
|
|
copy /= base;
|
|
size++;
|
|
}
|
|
|
|
buffer[size] = '\0'; // null-terminate the string
|
|
size--; // adjust index for last digit
|
|
|
|
while (value) {
|
|
uint8_t digit = value % base;
|
|
buffer[size] = digit < 10 ? ('0' + digit) : ('A' + digit - 10);
|
|
value /= base;
|
|
size--;
|
|
}
|
|
}
|