標籤:
redis 在底層中會把long long轉成string 再做儲存。 主個功能是在sds模組裡。下面兩函數是把long long 轉成 char 和 unsiged long long 轉成 char。大致的思路是:1 把數值從尾到頭一個一個轉成字元,2 算出長度,加上結束符。3 把字串反轉一下。4 如果是 long long 型 要考慮有負數的情況。
int sdsll2str(char *s, long long value) { char *p, aux; unsigned long long v; size_t l; /* Generate the string representation, this method produces * an reversed string. */ v = (value < 0) ? -value : value; p = s; do { *p++ = ‘0‘+(v%10); v /= 10; } while(v); if (value < 0) *p++ = ‘-‘; /* Compute length and add null term. */ l = p-s; *p = ‘\0‘; /* Reverse the string. */ p--; while(s < p) { aux = *s; *s = *p; *p = aux; s++; p--; } return l;}/* Identical sdsll2str(), but for unsigned long long type. */int sdsull2str(char *s, unsigned long long v) { char *p, aux; size_t l; /* Generate the string representation, this method produces * an reversed string. */ p = s; do { *p++ = ‘0‘+(v%10); v /= 10; } while(v); /* Compute length and add null term. */ l = p-s; *p = ‘\0‘; /* Reverse the string. */ p--; while(s < p) { aux = *s; *s = *p; *p = aux; s++; p--; } return l;}
redis 源碼閱讀 數值轉字元 longlong2str