/**
* 转载请注明出处, 由于个人技术能力有限, 英语水平欠缺,
* 有翻译不合适或错误的地方, 请纠正,
* 希望不要因为我的错误误导您, 希望您的智慧可以加入.
* @translator: selfimpr
* @mail: [email protected]
* @blog: http://blog.csdn.net/lgg201
*/
一些混杂的工具 API
long tclmax(long a, long b);
返回 a 和 b 中的大值
long tclmin(long a, long b);
返回 a 和 b 中的小值
unsigned long tclrand();
返回一个无符号长整型的随机数 . 内部是通过 /dev/urandom 生成随机数然后与时间戳进行计算 ( 没看懂 , 有懂的朋友有空的话发邮件 [email protected] 讲讲 , 学习学习 , 谢谢 ).
double tcdrand();
生成 double 型的随机数 .
int tcstricmp(const char *astr, const char *bstr);
大小写不敏感的比较两个字符串 , a>b 返回正数 , 小于返回负数 , 相等返回 0
bool tcstrfwm(const char *str, const char *key);
如果 str 以 key 开始则返回 true
bool tcstrifwm(const char *str, const char *key);
tcstrfwm 的大小写不敏感版本
bool tcstrbwm(const char *str, const char *key);
检查 str 是否以 key 结尾
bool tcstribwm(const char *str, const char *key);
tcstrbwm 的大小写不敏感版本
int tcstrdist(const char *astr, const char *bstr);
计算两个字符串的编辑距离 ( 实际上就是两个字符串的相似度 )
算法是通过一个数组模拟矩阵实现的 . 如果需要更详细了解该算法 , 可以搜 (Levenshtein Distance (LD, 来文史特距离 )) 相关资料 .
int tcstrdistutf(const char *astr, const char *bstr);
计算 UTF-8 编码的字符串的编辑距离
char *tcstrtoupper(char *str);
将字符串转换成大写
char *tcstrtolower(char *str);
将字符串转换成小写
char *tcstrtrim(char *str);
截掉字符串两端的非打印字符
char *tcstrsqzspc(char *str);
去掉字符串两端非打印字符 , 并且使字符串内部每个单词中间也最多有一个 .
char *tcstrsubchr(char *str, const char *rstr, const char *sstr);
将 str 中所有的在 rstr 中给出的字符按顺序替换为 sstr 中对应位置的字符 . 实际上就是一个字符表的替换 , 比如 tctrsubchar(“hello world”, “wo”, “-*”) 的返回结果就会是 ”hell* -*rld”, 当 sstr 的长度比 rstr 小时 , 实际上会导致 rstr 这个字符表中后面的部分字符在 sstr 中找不到对照 , 发生这种情况时 , 会把 str 中所有匹配的字符都移除掉 .
int tcstrcntutf(const char *str);
统计给定的字符串以 utf-8 编码的字符数
char *tcstrcututf(char *str, int num);
从 str 按照 utf-8 编码方式截取 num 个字符 , 该函数会对传入的 str 发生效应 ( 改变了它 )
void tcstrutftoucs(const char *str, uint16_t *ary, int *np);
将给定的 utf-8 编码的 str 字符串以 UCS-2 码转入 ary 数组中 , np 记录数组大小
int tcstrucstoutf(const uint16_t *ary, int num, char *str);
将给定的 UCS-2 数组转换成一个 utf-8 字符串放入 str, 返回值是该字符串长度 , 参数 num 指定 ary 的大小
TCLIST *tcstrsplit(const char *str, const char *delims);
将给定的字符串 str 用 delims 作为间隔符分割成一个列表对象
char *tcstrjoin(const TCLIST *list, char delim);
将给定的列表对象用给定的间隔符 delim 连接成一个字符串
int64_t tcatoi(const char *str);
把给定的字符串 str 转换成一个数值 , 与 javascript 中的 parseInt 功能类似 . 如果不是有效的整数表达式 , 将返回 0
double tcatof(const char *str);
tcatoi 的 double 版本 如果不是有效的浮点表达式 , 将返回 0.0
bool tcregexmatch(const char *str, const char *regex);
正则表达式匹配 , 如果正则以 * 开头 , 则表明是一个大小写不敏感的正则 , 匹配成功返回 true, 否则返回 false;
char *tcregexreplace(const char *str, const char *regex, const char *alt);
将 str 中所有匹配正则 regex 的子串都替换成 alt, 在 alt 中可以使用 & 代表整个匹配子串 , 用 /1----/9 代表匹配子组 , 关于正则匹配的语法 , 可以详细查阅正则表达式相关内容 , alt 中的上述语法为后引用 . 如果正则 regex 在 str 中没有匹配 , 将返回 str 的一个拷贝 .
void tcmd5hash(const void *ptr, int size, char *buf);
对指定的序列化对象获取一个 MD5 的 hash 值 , 放入 buf 中 , buf 需要 48bytes 或更大的内存空间 .
void tcarccipher(const void *ptr, int size, const void *kbuf, int ksiz, void *obuf);
用 ARC4 加密算法对给定的序列化对象加密或解密 , 结果输出到 obuf 中 , obuf 需要提供与 ptr 相同或更大的内存空间 .
double tctime();
获取当前时间戳 , 精确到微秒
void tccalendar(int64_t t, int jl, int *yearp, int *monp, int *dayp, int *hourp, int *minp, int *secp);
获取指定时间的格林威治日历 , 参数 t 为时间戳 , jl 为时差 , 后面每个参数是计算后用来存储结果的指针 , 分别是年 , 月 , 日 , 时 , 分 , 秒
void tcdatestrwww(int64_t t, int jl, char *buf);
根据时间戳 t 和时差 jl 获取一个 W3CDTF 时间格式串放入 buf 中 , buf 需要 48bytes 或更大的内存 (W3CDTF 格式 : "YYYY-MM-DDThh:mm:ddTZD")
void tcdatestrhttp(int64_t t, int jl, char *buf);
根据时间戳 t 和时差 jl 获取一个 RFC 1123 规范的时间格式串放入 buf 中 , buf 需要 48bytes 或更大内存 (RFC 1123 时间格式 : "Wdy, DD-Mon-YYYY hh:mm:dd TZD")
int64_t tcstrmktime(const char *str);
通过给定字符串获取一个时间戳 , 该字符串可以是十进制 , 十六进制 , W3CDTF, RFC822(1123) 等格式 , 十进制的时候 , 可以通过增加后缀表明单位 , s 表示秒 , m 表示分 , h 表示小时 , d 表示天 .
int tcjetlag();
用来获取本地时间的时差
int tcdayofweek(int year, int mon, int day);
指定年 , 月 , 日 , 返回当前是星期几 , 0 代表星期天 , 6 代表星期六