Redis 底層將 long long 轉為字串儲存,核心函數位於 SDS 模組。提供有號 sdsll2str 與無號 sdsull2str 兩版本。
\0。-。int sdsll2str(char *s, long long value) {
char *p, aux;
unsigned long long v;
size_t l;
v = (value < 0) ? -value : value;
p = s;
do { *p++ = '0' + (v % 10); v /= 10; } while (v);
if (value < 0) *p++ = '-';
l = p - s; *p = '\0';
p--;
while (s < p) { aux = *s; *s = *p; *p = aux; s++; p--; }
return l;
}
int sdsull2str(char *s, unsigned long long v) {
char *p, aux; size_t l;
p = s;
do { *p++ = '0' + (v % 10); v /= 10; } while (v);
l = p - s; *p = '\0';
p--;
while (s < p) { aux = *s; *s = *p; *p = aux; s++; p--; }
return l;
}
do-while 確保 0 也能正確轉為 "0"。unsigned long long,避免負數邏輯。這是 Redis 高效能字串處理的縮影。