前言
作为C语言基础,在面试的时候,经常会被要求实现数值到字符串、或者字符串到数值的转换函数。虽然难度不大,但是很容易在一些细节上出现纰漏。刚好最近在深度分析Redis7.0源代码。闲暇之余,顺带把这部分代码摘录出来,进行分析、注解。
作为一个学习记录的同时也方便后来者快速了解Redis内部是如何实现的。日后面试也许能用的上。
Redis实现方式
代码片段注释
int string2ll(const char *s, size_t slen, long long *value) {
const char *p = s; //指向s开始位置
size_t plen = 0; //
int negative = 0; //负数
unsigned long long v;
/* 如果传递表示字符串长度参数为0,则无需转换,直接返回 0 */
if (plen == slen)
return 0;
/* 特殊情况, 只有一个字符,并且是0字母 */
if (slen == 1 && p[0] ==