c – 嵌入式系统中的Long Long到char转换function

我正在使用嵌入式系统,我需要实现一种方法来将long long转换为char。

问题是我不能在这个系统中使用sprintf来做到这一点,所以我正在寻找替代方法/function来实现这一点。

欢迎实施LongLongToCharfunction的建议。

谷歌“itoa”。 有很多变化。 这是一个例子。

char* itoa(int val, int base){ static char buf[32] = {0}; int i = 30; for(; val && i ; --i, val /= base) buf[i] = "0123456789abcdef"[val % base]; return &buf[i+1]; } 

具体来说,这是一个’lltoa’。

 #include  #include  char* lltoa(long long val, int base){ static char buf[64] = {0}; int i = 62; int sign = (val < 0); if(sign) val = -val; if(val == 0) return "0"; for(; val && i ; --i, val /= base) { buf[i] = "0123456789abcdef"[val % base]; } if(sign) { buf[i--] = '-'; } return &buf[i+1]; } int main() { long long a = LLONG_MAX; long long b = LLONG_MIN + 1; long long c = 23; printf("%ld\n", sizeof(a)); printf("max '%s'\n", lltoa(a, 10)); printf("min '%s'\n", lltoa(b, 10)); printf("-1 '%s'\n", lltoa((long long)-1, 10)); printf("23 '%s'\n", lltoa(c, 10)); } 

使用lldiv() ,将CPU滴答保存在单独的/%
适用于整个long long长距离,包括0和那个讨厌的LONG_LONG_MIN

 const char *ToString(long long i) { static char buffer[sizeof(i)*3 + 1]; // Size could be a bit tighter char *p = &buffer[sizeof(buffer)]; *(--p) = '\0'; lldiv_t qr; qr.quot = i; do { qr = lldiv(qr.quot, 10); *(--p) = abs(qr.rem) + '0'; } while (qr.quot); if (i < 0) { *(--p) = '-'; } return p; }