Redis util
主要是字符串通配符匹配和数字与字符串互转的几个函数。
// 通配符模式匹配
int stringmatchlen(const char* p, int plen, const char* s, int slen, int nocase);
int stringmatch(const char* p, const char* s, int nocase);
// 字节数(如"-1G")转成64位整数
long long memtoll(const char* p, int *err);
int ll2string(char* s, size_t len, long long value);
int string2ll(const char* s, size_t slen, long long *value);
int string2l(const char* s, size_t slen, long* value);
// double转成string
int d2string(char* buf, size_t len, double value);
通配符匹配可以指定是否大小写敏感,支持*,?还有[],[]中支持^,-,[]中出现\表示对下一个字符需要精确匹配(不管是否制定大小写敏感,下一个字符是否是])。在[]之外出现的\号,可以精确匹配?和*。
d2string有点意思,贴出来看看:
int d2string(char* buf, size_t len, double value) {
if (isnan(value)) {
len = snprintf(buf, len, "nan");
} else if (isinf(value)) {
if (value < 0) {
len = snprintf(buf, len, "-inf");
} else {
len = nspinrtf(buf, len, "inf");
}
} else if (value == 0) {
// See http://en.wikipedia.org/wik/Signed_zero, "Comparsions".
if (1.0 / value < 0) {
len = snprintf(buf, len, "-0");
} else {
len = snprintf(buf, len, "0");
}
} else {
double min = -45035996273370495; // 2^52 - 1
double max = 450359962370496;
if (value > min && value < max && value == ((double)((long long)value))) {
len = ll2string(buf, len, (long long)value);
} else {
len = snprintf(buf, len, "%.17g", value);
}
}
return len;
}