• duobangotinySAK,20121213


    阅读版本: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);
    }


    无论生活、还是技术,一切都不断的学习和更新~~~努力~
  • 相关阅读:
    Design and Analysis of Algorithms_Decrease-and-Conquer
    TCPL 札记
    谬论:64 = 65?
    二叉树内部顶点与外部顶点在数量上的关系
    Design and Analysis of Algorithms_Divide-and-Conquer
    LeetCode 36. Valid Sudoku
    LeetCode 58. Length of Last Word
    LeetCode 66. Plus One
    LeetCode 67. Add Binary
    LeetCode 70. Climbing Stairs
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/2816504.html
Copyright © 2020-2023  润新知