首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Redis 原始碼閱讀:長整數轉字串的 longlong2str 實作細節

     編輯:關於C語言

Redis 原始碼閱讀:長整數轉字串的 longlong2str 實作細節

Redis 底層將 long long 轉為字串儲存,核心函數位於 SDS 模組。提供有號 sdsll2str 與無號 sdsull2str 兩版本。

演算法邏輯

  1. 從最低位逐位轉換字元(取模 10 + '0'),產生反轉字串。
  2. 計算長度,補上結束符 \0。
  3. 雙指標原地反轉字串。
  4. 有號版本額外處理負號:先取絕對值轉換,最後補 -。

原始碼

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 高效能字串處理的縮影。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved