Я не уверен, какой набор инструментов используется в Arduino.Иногда библиотека поддерживает нестандартный флаг «группировка тысяч» - символ одинарной кавычки является типичным расширением:
printf("%'ld",long_val);
Если ваша библиотека не поддерживает это, может подойти что-то вроде следующего:
#include <stddef.h>
#include <string.h>
#include <limits.h>
#include <stdio.h>
#include <assert.h>
size_t strlcpy( char* dest, char const* src, size_t dest_size);
size_t format_long( long x, char* buf, size_t bufsize)
{
// This code assumes 32-bit long, is that the
// case on Arduino? Modifying it to be able to
// handle 64-bit longs (or to not care) should be
// pretty straightforward if that's necessary.
char scratch[sizeof("-2,147,483,648")];
char* p = scratch + sizeof(scratch); // Work from end of buffer
int neg = (x < 0);
// Handle a couple special cases
if (x == 0) {
return strlcpy( buf, "0", bufsize);
}
if (x == INT_MIN) {
// Lazy way of handling this special case
return strlcpy( buf, "-2,147,483,648", bufsize);
}
// Work with positive values from here on
if (x < 0) x = -x;
int group_counter = 3;
*(--p) = 0; // Null terminate the scratch buffer
while (x != 0) {
int digit = x % 10;
x = x / 10;
assert( p != &scratch[0]);
*(--p) = "0123456789"[digit];
if ((x != 0) && (--group_counter == 0)) {
assert( p != &scratch[0]);
*(--p) = ',';
group_counter = 3;
}
}
if (neg) {
assert( p != &scratch[0]);
*(--p) = '-';
}
return strlcpy(buf, p, bufsize);
}
/*
A non-optimal strlcpy() implementation that helps copying string
without danger of buffer overflow.
This is provided just in case you don't have an implementation
so the code above will actually compile and run.
*/
size_t strlcpy( char* dest, char const* src, size_t dest_size)
{
size_t len = strlen(src);
if (dest_size == 0) {
// nothing to copy - just return how long the buffer should be
// (note that the return value doens't include the null terminator)
return len;
}
size_t tocopy = (dest_size <= len) ? dest_size-1 : len;
memmove( dest, src, tocopy);
dest[tocopy] = 0;
return len;
}