阅读版本:2.0
【内存管理】:
重新封装malloc,free,realloc,calloc等函数
主要接口:
void* tsk_malloc(tsk_size_t size);
void* tsk_realloc (void * ptr, tsk_size_t size);
void tsk_free(void** ptr);
void* tsk_calloc(tsk_size_t num, tsk_size_t size);
在实际测试代码中看到都是使用宏函数释放TSK_FREE
void test_base64()
{
size_t i, size;
char *output_e = 0, *output_d = 0;
for(i=0; i<sizeof(b64_msgs)/sizeof(struct b64_msg); i++){
/*===========
* Encoding
*/
size = tsk_base64_encode((const uint8_t*)b64_msgs[i].ascii, strlen(b64_msgs[i].ascii), &output_e);
if(tsk_striequals(b64_msgs[i].base64, output_e)){
TSK_DEBUG_INFO("[BASE64-%d encoding] ==> OK", i);
}
else{
TSK_DEBUG_INFO("[BASE64-%d encoding] ==> NOK", i);
}
TSK_FREE(output_e);
/*===========
* Decoding
*/
size = tsk_base64_decode((const uint8_t*)b64_msgs[i].base64, strlen(b64_msgs[i].base64), &output_d);
if(tsk_striequals(b64_msgs[i].ascii, output_d)){
TSK_DEBUG_INFO("[BASE64-%d decoding] ==> OK", i);
}
else{
TSK_DEBUG_INFO("[BASE64-%d decoding] ==> NOK", i);
}
TSK_FREE(output_d);
}
}
再看看string中函数对此使用方式:
void tsk_strncat(char** destination, const char* source, tsk_size_t n)
{
tsk_size_t index = 0;
tsk_size_t tsk_size_to_cat = (n > tsk_strlen(source)) ? tsk_strlen(source) : n;
if(!source || !n){
return;
}
if(!*destination){
*destination = (char*)tsk_malloc(tsk_size_to_cat+1);
strncpy(*destination, source, tsk_size_to_cat+1);
}else{
index = tsk_strlen(*destination);
*destination = tsk_realloc(*destination, index + tsk_size_to_cat+1);
strncpy(((*destination)+index), source, tsk_size_to_cat+1);
}
(*destination)[index + tsk_size_to_cat] = '\0';
}
【字符串处理】(tsk_string.h)
接口:
char tsk_b10tob16(char c);
char tsk_b16tob10(char c);
用于url编码,把指定字符转为对应的16进制字符,以字符方式显示。
比如:字符'['=101 1011=91=0x5B,传送给服务器需要以16进制方式%5B
这个时候用上述函数处理
测试代码如下:
char input = '[';
char buf[3];
buf[0] = tsk_b10tob16(input >> 4) ,buf[1] = tsk_b10tob16(input & 15) ,buf[2] = '\0';
printf("%s" buf);// output 5b
字符串另外常用接口:
截取
void tsk_strtrim_left(char **str);
void tsk_strtrim_right(char **str);
void tsk_strtrim(char **str);
随机,转换
void tsk_itoa(int64_t i, tsk_istr_t *result);
long tsk_atox(const char*);
void tsk_strrandom(tsk_istr_t *result);
当然还是查找、拼接等相关函数接口,类似c接口,不罗列了
宏定义接口:
tsk_strempty
tsk_strnullORempty
tsk_strtrim_both
tsk_striequals
tsk_strniequals
tsk_strequals
tsk_strnequals
tsk_strlen
【URL处理】:(tsk_url.h)
接口:
char* tsk_url_encode(const char* url);
char* tsk_url_decode(const char* url);
测试代码:
void test_url()
{
const char *url = "http://xcap.example.org/resource-lists/users/sip:RCSUser@example.org/index/~~/resource-lists/list%5B@name=%22rcs%22%5D";
char *str1, *str2;
/*decode url*/
str1 = tsk_url_decode(url);
printf("test_url/// decoded url:%s\n", str1);
/*encode url*/
str2 = tsk_url_encode(str1);
printf("test_url/// encoded url:%s\n", str2);
tsk_free((void**)&str1);
tsk_free((void**)&str2);
}