#include int fp4816_to_a(char *buffer,fp4816_t v) { int8_t n = 14; fp4816_t div = 0x5AF3107A4000LL << 16; union { fp4816_t value; int32_t i32; } u; u.value = v; if (u.value < 0) { *(buffer++) = '-'; u.value = -u.value; }; while (n >= 0) { if (u.value >= div) { uint8_t digit = u.value / div; *(buffer++) = ('0' + digit); u.value %= div; } else if (n == 0) { *(buffer++) = '0'; }; div /= 10; n--; }; *(buffer++) = ','; while (n > -12) { u.i32 *= 10; uint8_t digit = u.i32 / (1L<<16); u.i32 %= (1L<<16); *(buffer++) = '0' + digit; n--; }; *(buffer) = 0x00; return n; };