程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> redis 源碼閱讀 數值轉字符 longlong2str,redislonglong2str

redis 源碼閱讀 數值轉字符 longlong2str,redislonglong2str

編輯:關於C語言

redis 源碼閱讀 數值轉字符 longlong2str,redislonglong2str


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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved