#include char *itoa(int value, char *str, int base) { char *p = str; char *p1, *p2; unsigned int uvalue = value; int negative = 0; if (base < 2 || base > 36) { *str = '\0'; return str; } if (value < 0 && base == 10) { negative = 1; uvalue = -value; } // Convert to string do { int digit = uvalue % base; *p++ = (digit < 10) ? '0' + digit : 'a' + (digit - 10); uvalue /= base; } while (uvalue); if (negative) *p++ = '-'; *p = '\0'; // Reverse string p1 = str; p2 = p - 1; while (p1 < p2) { char tmp = *p1; *p1++ = *p2; *p2-- = tmp; } return str; } void *memset(void *dst, int c, size_t length) { u8 *ptr = (u8 *)dst; const u8 value = (u8)c; while (length--) *(ptr++) = value; return dst; } void *memcpy(void *dst, const void *src, size_t len) { u8 *d = (u8 *)dst; const u8 *s = (const u8 *)src; for (size_t i = 0; i < len; i++) { d[i] = s[i]; } return dst; } void *memmove(void *dst, const void *src, size_t len) { u8 *d = (u8 *)dst; const u8 *s = (const u8 *)src; if (d < s) { for (size_t i = 0; i < len; i++) { d[i] = s[i]; } } else if (d > s) { for (size_t i = len; i > 0; i--) { d[i - 1] = s[i - 1]; } } return dst; } int memcmp(const void *s1, const void *s2, size_t len) { const u8 *a = (const u8 *)s1; const u8 *b = (const u8 *)s2; for (size_t i = 0; i < len; i++) { if (a[i] != b[i]) { return (int)a[i] - (int)b[i]; } } return 0; } size_t strlen(const char *s) { const char *p = s; while (*p) ++p; return (size_t)(p - s); } size_t strnlen(const char *s, size_t maxlen) { size_t len = 0; while (len < maxlen && s[len] != '\0') { len++; } return len; }