c语言基础---- 第六章 函数封装合集

时间:2019-10-08
本文章向大家介绍c语言基础---- 第六章 函数封装合集,主要包括c语言基础---- 第六章 函数封装合集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

//判断字符是否为小写

#define RMMI_IS_LOWER( alpha_char )   \
    ( ( (alpha_char >= rmmi_char_a) && (alpha_char <= rmmi_char_z) ) ?  1 : 0 )

//判断字符是否为十六进制数

#define RMMI_IS_HEX_NUMBER( alpha_char )   \
   ( ( (alpha_char >= RMMI_CHAR_0) && (alpha_char <= RMMI_CHAR_F) ) ? 1 : 0 )

//全部转换成大写

void toUpper(kal_uint8 *str)
{
    kal_uint8 *ptr;

    assert(str != NULL);
    ptr = str;
    while (*ptr != 0)
    {
        if (RMMI_IS_LOWER(*ptr))
        {
            *ptr += (kal_uint8)(RMMI_CHAR_A - rmmi_char_a);
        }
        ptr++;
    }
}

//实现字符串转换成十六进制

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include <ctype.h>
#include <assert.h>

typedef unsigned char           kal_uint8;
typedef unsigned short int      kal_uint16;
/* portable 16-bit signed integer */
typedef signed short int        kal_int16;

typedef enum
{
    RMMI_SPACE = ' ',
    RMMI_EQUAL = '=',
    RMMI_COMMA = ',',
    RMMI_SEMICOLON = ';',
    RMMI_COLON = ':',
    RMMI_AT = '@',
    RMMI_HAT = '^',
    RMMI_DOUBLE_QUOTE = '"',
    RMMI_QUESTION_MARK = '?',
    RMMI_EXCLAMATION_MARK = '!',
    RMMI_FORWARD_SLASH = '/',
    RMMI_L_ANGLE_BRACKET = '<',
    RMMI_R_ANGLE_BRACKET = '>',
    RMMI_L_SQ_BRACKET = '[',
    RMMI_R_SQ_BRACKET = ']',
    RMMI_L_CURLY_BRACKET = '{',
    RMMI_R_CURLY_BRACKET = '}',
    RMMI_CHAR_STAR = '*',
    RMMI_CHAR_POUND = '#',
    RMMI_CHAR_AMPSAND = '&',
    RMMI_CHAR_PERCENT = '%',
    RMMI_CHAR_PLUS = '+',
    RMMI_CHAR_MINUS = '-',
    RMMI_CHAR_DOT = '.',
    RMMI_CHAR_ULINE = '_',
    RMMI_CHAR_TILDE = '~',
    RMMI_CHAR_REVERSE_SOLIDUS = '\\',
    RMMI_CHAR_VERTICAL_LINE = '|',
    RMMI_END_OF_STRING_CHAR = '\0',
    RMMI_CHAR_0 = '0',
    RMMI_CHAR_1 = '1',
    RMMI_CHAR_2 = '2',
    RMMI_CHAR_3 = '3',
    RMMI_CHAR_4 = '4',
    RMMI_CHAR_5 = '5',
    RMMI_CHAR_6 = '6',
    RMMI_CHAR_7 = '7',
    RMMI_CHAR_8 = '8',
    RMMI_CHAR_9 = '9',
    RMMI_CHAR_A = 'A',
    RMMI_CHAR_B = 'B',
    RMMI_CHAR_C = 'C',
    RMMI_CHAR_D = 'D',
    RMMI_CHAR_E = 'E',
    RMMI_CHAR_F = 'F',
    RMMI_CHAR_G = 'G',
    RMMI_CHAR_H = 'H',
    RMMI_CHAR_I = 'I',
    RMMI_CHAR_J = 'J',
    RMMI_CHAR_K = 'K',
    RMMI_CHAR_L = 'L',
    RMMI_CHAR_M = 'M',
    RMMI_CHAR_N = 'N',
    RMMI_CHAR_O = 'O',
    RMMI_CHAR_P = 'P',
    RMMI_CHAR_Q = 'Q',
    RMMI_CHAR_R = 'R',
    RMMI_CHAR_S = 'S',
    RMMI_CHAR_T = 'T',
    RMMI_CHAR_U = 'U',
    RMMI_CHAR_V = 'V',
    RMMI_CHAR_W = 'W',
    RMMI_CHAR_X = 'X',
    RMMI_CHAR_Y = 'Y',
    RMMI_CHAR_Z = 'Z',
    rmmi_char_a = 'a',
    rmmi_char_b = 'b',
    rmmi_char_c = 'c',
    rmmi_char_d = 'd',
    rmmi_char_e = 'e',
    rmmi_char_f = 'f',
    rmmi_char_g = 'g',
    rmmi_char_h = 'h',
    rmmi_char_i = 'i',
    rmmi_char_j = 'j',
    rmmi_char_k = 'k',
    rmmi_char_l = 'l',
    rmmi_char_m = 'm',
    rmmi_char_n = 'n',
    rmmi_char_o = 'o',
    rmmi_char_p = 'p',
    rmmi_char_q = 'q',
    rmmi_char_r = 'r',
    rmmi_char_s = 's',
    rmmi_char_t = 't',
    rmmi_char_u = 'u',
    rmmi_char_v = 'v',
    rmmi_char_w = 'w',
    rmmi_char_x = 'x',
    rmmi_char_y = 'y',
    rmmi_char_z = 'z',
    RMMI_R_BRACKET = ')',  
    RMMI_L_BRACKET = '(', 
    RMMI_MONEY = '$'
} rmmi_char_enum;

//判断字符是否为小写
#define RMMI_IS_LOWER( alpha_char )   \
    ( ( (alpha_char >= rmmi_char_a) && (alpha_char <= rmmi_char_z) ) ?  1 : 0 )

//全部转换成大写
void toUpper(kal_uint8 *str)
{
    kal_uint8 *ptr;

    assert(str != NULL);
    ptr = str;
    while (*ptr != 0)
    {
        if (RMMI_IS_LOWER(*ptr))
        {
            *ptr += (kal_uint8)(RMMI_CHAR_A - rmmi_char_a);
        }
        ptr++;
    }
}

//判断字符是否为十六进制数
#define RMMI_IS_HEX_NUMBER( alpha_char )   \
   ( ( (alpha_char >= RMMI_CHAR_0) && (alpha_char <= RMMI_CHAR_F) ) ? 1 : 0 )

kal_uint8 *str = "1D1213AB6FC1718B19202122232425A6C";


//字符串转换成十六进制
int StringToHex(kal_uint8 *str,kal_uint16 *val, unsigned int *vallen)
{
    kal_uint8 high = 0, low = 0;
    int tmstrlen = strlen(str), cnt = 0;
    tmstrlen = strlen(str);
    
    assert((str != NULL) && (val != NULL));
    toUpper(str);//对字符串实现小写字母转换成大写,可以省去对小写字母的判断
    //toupper : 只能对单独的一个字符进行转换:int toupper ( int c );
    
    while(cnt < (tmstrlen / 2))
    {
        high = ((*str > RMMI_CHAR_9) && (*str <= RMMI_CHAR_F) ) ? *str - RMMI_CHAR_0 - 0x07 : *str - RMMI_CHAR_0;
        low = (*(++ str) > RMMI_CHAR_9 && (*str <= RMMI_CHAR_F) ) ? *(str) - RMMI_CHAR_0 - 0x07 : *(str) - RMMI_CHAR_0;
        val[cnt] = ((high & 0x0f) << 4 | (low & 0x0f));
        str ++;
        cnt ++;
    }
    if(tmstrlen % 2 != 0) val[cnt] = ((*str > RMMI_CHAR_9) && (*str <= RMMI_CHAR_F) ) ? *str - RMMI_CHAR_0 - 0x07 : *str - RMMI_CHAR_0;
    
    printf("%02x\n",val[cnt]);
    
    if(vallen != NULL) *vallen = tmstrlen / 2 + tmstrlen % 2;
    return tmstrlen / 2 + tmstrlen % 2;
}

int main(int argc, const char *argv)
{
    int cnt;
    kal_uint16 val[33];
    
    int vallen = 0;
    StringToHex(str, val, &vallen);
    for(cnt = 0; cnt < vallen; cnt ++)
    {
        printf("%02X ", val[cnt]);
    } 
    putchar(10); 
    return 0;
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//字符串转换成uchar

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include <ctype.h>
#include <assert.h>

typedef unsigned char           kal_uint8;
typedef unsigned short int      kal_uint16;
/* portable 16-bit signed integer */
typedef signed short int        kal_int16;

typedef enum
{
    RMMI_SPACE = ' ',
    RMMI_EQUAL = '=',
    RMMI_COMMA = ',',
    RMMI_SEMICOLON = ';',
    RMMI_COLON = ':',
    RMMI_AT = '@',
    RMMI_HAT = '^',
    RMMI_DOUBLE_QUOTE = '"',
    RMMI_QUESTION_MARK = '?',
    RMMI_EXCLAMATION_MARK = '!',
    RMMI_FORWARD_SLASH = '/',
    RMMI_L_ANGLE_BRACKET = '<',
    RMMI_R_ANGLE_BRACKET = '>',
    RMMI_L_SQ_BRACKET = '[',
    RMMI_R_SQ_BRACKET = ']',
    RMMI_L_CURLY_BRACKET = '{',
    RMMI_R_CURLY_BRACKET = '}',
    RMMI_CHAR_STAR = '*',
    RMMI_CHAR_POUND = '#',
    RMMI_CHAR_AMPSAND = '&',
    RMMI_CHAR_PERCENT = '%',
    RMMI_CHAR_PLUS = '+',
    RMMI_CHAR_MINUS = '-',
    RMMI_CHAR_DOT = '.',
    RMMI_CHAR_ULINE = '_',
    RMMI_CHAR_TILDE = '~',
    RMMI_CHAR_REVERSE_SOLIDUS = '\\',
    RMMI_CHAR_VERTICAL_LINE = '|',
    RMMI_END_OF_STRING_CHAR = '\0',
    RMMI_CHAR_0 = '0',
    RMMI_CHAR_1 = '1',
    RMMI_CHAR_2 = '2',
    RMMI_CHAR_3 = '3',
    RMMI_CHAR_4 = '4',
    RMMI_CHAR_5 = '5',
    RMMI_CHAR_6 = '6',
    RMMI_CHAR_7 = '7',
    RMMI_CHAR_8 = '8',
    RMMI_CHAR_9 = '9',
    RMMI_CHAR_A = 'A',
    RMMI_CHAR_B = 'B',
    RMMI_CHAR_C = 'C',
    RMMI_CHAR_D = 'D',
    RMMI_CHAR_E = 'E',
    RMMI_CHAR_F = 'F',
    RMMI_CHAR_G = 'G',
    RMMI_CHAR_H = 'H',
    RMMI_CHAR_I = 'I',
    RMMI_CHAR_J = 'J',
    RMMI_CHAR_K = 'K',
    RMMI_CHAR_L = 'L',
    RMMI_CHAR_M = 'M',
    RMMI_CHAR_N = 'N',
    RMMI_CHAR_O = 'O',
    RMMI_CHAR_P = 'P',
    RMMI_CHAR_Q = 'Q',
    RMMI_CHAR_R = 'R',
    RMMI_CHAR_S = 'S',
    RMMI_CHAR_T = 'T',
    RMMI_CHAR_U = 'U',
    RMMI_CHAR_V = 'V',
    RMMI_CHAR_W = 'W',
    RMMI_CHAR_X = 'X',
    RMMI_CHAR_Y = 'Y',
    RMMI_CHAR_Z = 'Z',
    rmmi_char_a = 'a',
    rmmi_char_b = 'b',
    rmmi_char_c = 'c',
    rmmi_char_d = 'd',
    rmmi_char_e = 'e',
    rmmi_char_f = 'f',
    rmmi_char_g = 'g',
    rmmi_char_h = 'h',
    rmmi_char_i = 'i',
    rmmi_char_j = 'j',
    rmmi_char_k = 'k',
    rmmi_char_l = 'l',
    rmmi_char_m = 'm',
    rmmi_char_n = 'n',
    rmmi_char_o = 'o',
    rmmi_char_p = 'p',
    rmmi_char_q = 'q',
    rmmi_char_r = 'r',
    rmmi_char_s = 's',
    rmmi_char_t = 't',
    rmmi_char_u = 'u',
    rmmi_char_v = 'v',
    rmmi_char_w = 'w',
    rmmi_char_x = 'x',
    rmmi_char_y = 'y',
    rmmi_char_z = 'z',
    RMMI_R_BRACKET = ')',  
    RMMI_L_BRACKET = '(', 
    RMMI_MONEY = '$'
} rmmi_char_enum;

#define RMMI_IS_HEX_NUMBER( alpha_char )   \
   ( ( (alpha_char >= RMMI_CHAR_0) && (alpha_char <= RMMI_CHAR_9) ) ? 1 : 0 )

kal_uint8 *str = "12152395364665748974644798";

void check_hex_value(kal_uint8 *str, kal_uint8 *val)
{
    kal_uint16 i = 0, j = 0;
    kal_uint8 temp;

    ASSERT((str != NULL) && (val != NULL));
    toUpper(str);

    while (str[i] != RMMI_END_OF_STRING_CHAR)
    {
        if (RMMI_IS_NUMBER(str[i]))
        {
            temp = str[i] - RMMI_CHAR_0;
        }
        else
        {
            temp = (str[i] - RMMI_CHAR_A) + 10;
        }

        if (RMMI_IS_NUMBER(str[i + 1]))
        {
            temp = (temp << 4) + (str[i + 1] - RMMI_CHAR_0);
        }
        else
        {
            temp = (temp << 4) + ((str[i + 1] - RMMI_CHAR_A) + 10);
        }

        val[j] = temp;
        i += 2;
        j++;
    }    
}

int main(int argc, const char *argv)
{
    int cnt;
    kal_uint8 val[33];
    
    int vallen = 0;
    check_hex_value(str, val);
    for(cnt = 0; cnt < vallen; cnt ++)
    {
        printf("%02X ", val[cnt]);
    } 
    putchar(10); 
    return 0;
}    
    

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/vx-cg248805770/p/11634460.html