@[TOC](文章目录) # 前言 本文主要记录下,在工作中一些常用的函数。 # 数组长度 ```c #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) ``` # 判断数字 ```c #define IS_DIGIT(x) ((x) >= '0' && (x) <= '9') ``` # 判断16进制 ```c #define IS_HEX(x) (('A' <= (x) && (x) <= 'F') || ('a' <= (x) && (x) <= 'f') || IS_DIGIT(x)) ``` # 判断域名(网址) ```c #define IS_DOMAIN(x) (('A' <= (x) && (x) <= 'Z') || ('a' <= (x) && (x) <= 'z') || IS_DIGIT(x) || ((x) == '-') || ((x) == '.')) ``` # 判断浮点数 ```c #define IS_FLOAT(x) (((x) == '-') || ((x) == '.') || IS_DIGIT(x)) ``` # 判断空字符串 ```c #define STR_EMPTY(str) (str[0] == '\0') ``` # 最小值 ```c //缺点:不能判断输入的数据类型 #define MIN(a, b) ((a) < (b) ? (a) : (b)) ``` # 最大值 ```c //缺点:不能判断输入的数据类型 #define MAX(a, b) ((a) > (b) ? (a) : (b)) ``` # 函数:16进制字符转16进制 ```c /** * \brief 16进制字符转16进制 * \param [in] c 要处理的字符 * \return hex 最终值 * \example '5' -> 0x5 'b'-> 0xb */ int32_t char_to_hex(chr8_t c) { if (c >= '0' && c <= '9') return c - '0'; else if (c >= 'a' && c <= 'f') return c - 'a' + 10; else if (c >= 'A' && c <= 'F') return c - 'A' + 10; else return -1; } ``` # 函数:16进制转16进制字符 ```c /** * \brief 16进制转16进制字符 * \param [in] h 要处理的数字 * \return hex 最终值 * \example 0x5 -> '5' 0xb -> 'B' */ int32_t hex_to_char(uchr8_t h) { if (h <= 9) return h + '0'; else if ((h >= 10) && (h <= 15)) return h + ('A' - 10); else return -1; } ``` # 函数:16进制字符串转16进制 ```c /** * \brief 16进制字符串转成16进制整型 * \param [in] str 要处理的字符串 * \return hex 最终值 * \example "12" -> 0x12 "ab" -> 0xab */ int32_t str_to_hex(chr8_t *str) { int32_t hex = 0; while (*str && IS_HEX(*str)) { hex = (hex << 4) + char_to_hex(*str); str++; } return hex; } ``` # 函数:10进制字符串转10进制 ```c /** * \brief 10进制字符串转成10进制整型 * \param [in] str 要处理的字符串 * \return digit 最终值 * \example "12" -> 0x0b "ab" -> 0x0(不支持返回0) */ int32_t str_to_digit(chr8_t *str) { int32_t digit = 0; while (*str && IS_DIGIT(*str)) { digit = (digit * 10 + (*str - '0')); str++; } return digit; } ``` # 函数: 判断字符串是不是浮点数 ```c /** * \brief 判断字符串是不是浮点数 * \param [in] str 要判断的字符串 * \return * USRTRUE 是浮点数 * USRFALSE 不是浮点数 */ usrbool str_isfloat(chr8_t *str) { for (int32_t i = 0; str[i] != '\0'; i++) { if (!IS_FLOAT(str[i])) { return USRFALSE; } } return USRTRUE; } ``` # 函数: 判断字符串是不是16进制 ```c /** * \brief 判断字符串是不是16进制 * \param [in] str 要判断的字符串 * \return * USRTRUE 是16进制 * USRFALSE 不是16进制 */ usrbool str_ishex(chr8_t *str) { for (int32_t i = 0; str[i] != '\0'; i++) { if (!IS_HEX(str[i])) { return USRFALSE; } } return USRTRUE; } ``` # 函数: 计算10的n次方 ```c /** * \brief 计算10的N次方 * \param [in] n 对应的次方数 * \return factor 最终值 * \example 10**3 -> 1000 */ uint32_t calc_10nth(uint32_t n) { uint32_t i, factor = 1; for (i = 0; i < n; i++) { factor *= 10; } return factor; } ``` 如果能够帮助到您,不介意的话,请作者喝一杯咖啡吧 ![img](/i/l/?n=23&i=blog/2976129/202302/2976129-20230223130707176-562779962.png)
标签:int32,temt,return,str,16,hex,&& From: https://www.cnblogs.com/Wei-Ting/p/17174004.html