码迷,mamicode.com
首页 > 其他好文 > 详细

redis 源码阅读 数值转字符 longlong2str

时间:2016-07-24 09:24:42      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/fangshenghui/p/5700098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!