#include "format.h" size_t ltostr(char *s, size_t limit, unsigned long l, bool sgn, int radix) { size_t si = 0; size_t digits = 0; if((long)l < 0 && sgn) { l = -((long)l); s[0] = '-'; } for(unsigned long lv = l; lv != 0; lv /= radix) digits++; digits = digits > limit ? limit : digits; if(digits-- == 0) s[si++] = '0'; for(unsigned long lv = l; lv != 0; lv /= radix) { if(si >= limit) return si; int digit = lv % radix; s[(digits - si)] = (digit >= 10 ? (digit + 'a' - 10) : digit + '0'); si++; } return si; }