100 lines
No EOL
1.7 KiB
C
100 lines
No EOL
1.7 KiB
C
#include <stdint.h>
|
|
#include "panic.h"
|
|
#include <stdbool.h>
|
|
|
|
void memcpy(void *from, void *to, uint32_t n) {
|
|
panic("Not implemented (memcpy).");
|
|
}
|
|
|
|
void u32_dec(uint32_t n, uint8_t *b) {
|
|
if (!n) {
|
|
*(uint16_t *)b = '0';
|
|
return;
|
|
}
|
|
bool zero = false;
|
|
for (uint32_t m = 1000000000; m; m /= 10) {
|
|
uint8_t d = (n / m) % 10;
|
|
if (zero)
|
|
*(b++) = d + '0';
|
|
else if (d) {
|
|
zero = true;
|
|
*(b++) = d + '0';
|
|
}
|
|
}
|
|
*b = 0;
|
|
}
|
|
|
|
void u16_dec(uint16_t n, uint8_t *b) {
|
|
if (!n) {
|
|
*(uint16_t *)b = '0';
|
|
return;
|
|
}
|
|
bool zero = false;
|
|
for (uint32_t m = 10000; m; m /= 10) {
|
|
uint8_t d = (n / m) % 10;
|
|
if (zero)
|
|
*(b++) = d + '0';
|
|
else if (d) {
|
|
zero = true;
|
|
*(b++) = d + '0';
|
|
}
|
|
}
|
|
*b = 0;
|
|
}
|
|
|
|
void u8_dec(uint8_t n, uint8_t *b) {
|
|
if (!n) {
|
|
*(uint16_t *)b = '0';
|
|
return;
|
|
}
|
|
bool zero = false;
|
|
for (uint32_t m = 100; m; m /= 10) {
|
|
uint8_t d = (n / m) % 10;
|
|
if (zero)
|
|
*(b++) = d + '0';
|
|
else if (d) {
|
|
zero = true;
|
|
*(b++) = d + '0';
|
|
}
|
|
}
|
|
*b = 0;
|
|
}
|
|
|
|
void u32_hex(uint32_t n, uint8_t *b) {
|
|
uint8_t m = 28;
|
|
while (1) {
|
|
uint8_t d = (n >> m) & 0xf;
|
|
*(b++) = d >= 10 ? 'a' + d - 10 : '0' + d;
|
|
if (!m) {
|
|
*b = 0;
|
|
return;
|
|
}
|
|
m -= 4;
|
|
}
|
|
}
|
|
|
|
void u16_hex(uint16_t n, uint8_t *b) {
|
|
uint8_t m = 12;
|
|
while (1) {
|
|
uint8_t d = (n >> m) & 0xf;
|
|
*(b++) = d >= 10 ? 'a' + d - 10 : '0' + d;
|
|
if (!m) {
|
|
*b = 0;
|
|
return;
|
|
}
|
|
m -= 4;
|
|
}
|
|
}
|
|
|
|
void u8_hex(uint8_t n, uint8_t *b) {
|
|
uint8_t m = 4;
|
|
while (1) {
|
|
uint8_t d = (n >> m) & 0xf;
|
|
*(b++) = d >= 10 ? 'a' + d - 10 : '0' + d;
|
|
if (!m) {
|
|
*b = 0;
|
|
return;
|
|
}
|
|
m -= 4;
|
|
}
|
|
} |