龙空技术网

C语言有哪些实用的函数

正点原子原子哥 928

前言:

现在大家对“c语言数字函数”大致比较关注,同学们都想要分析一些“c语言数字函数”的相关文章。那么小编同时在网上网罗了一些关于“c语言数字函数””的相关文章,希望小伙伴们能喜欢,你们快快来了解一下吧!

01.程序断言:用来调试代码是否满足条件

#defineFILE_ASSERT(term)                                            do                                {                                                               if (!(term))                      {                                                           printf("Assert failed. Condition(%s). [%s][%d]\r\n",term, __FUNCTION__, __LINE__);                 \while(1)                                                         {                                                                ;                                                       }                                                 }                                    } while (0)

02.获取指定地址上的一个字节或字

#define SITE_B( x ) ( *( (byte *) (x) ) )#define SITE _W( x ) ( *( (word *) (x) ) )

03.计算最大值和最小值

#define LV_MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )#define LV_MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

04.将一个字母转换为大写

#define CAPITAL( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

05.获取数组元素的个数

#define MY_SIZE( x ) ( sizeof( (x) ) / sizeof( (x[0]) ) )

06.颜色转换

#define RGB888_turn_monochrome(color)        ((color)?0:1)#define RGB888_turn_RGB233(color)            ((((color&0xff0000)>>22) << 6) +                                                   (((color&0xff00)>>13) << 3) +(((color&0xff)>>5)))#define RGB888_turn_RGB565(color)             ((((color&0xff0000)>>19) << 11) +                                                   (((color&0xff00)>>10) << 5) +(((color&0xff)>>3)))int LV_RGB888(uint32_t color){   int ret=0; switch(cfgColorDepth) { case 1: // 颜色深度1,单色 {       ret= RGB888_turn_monochrome(color); break; } case 8: // 颜色深度8,RGB233 {       ret= RGB888_turn_RGB233(color); break; } case 16: // 颜色深度16,RGB565 {       ret= RGB888_turn_RGB565(color); break; } case 24: // 颜色深度24,RGB888 {       ret= color; break; } default: break; } return ret;}

07.二进制字符串转换为十进制整数

/*** @brief       二进制字符串转换为十进制整数* @param       str:待反转的字符串* @retval      反转字符串*/static void lv_atk_bit_str_reverse(char str[]){ int n=strlen(str); int i; char temp; for (i = 0;i < (n/2); i++) {       temp = str[i];       str[i] = str[n-i-1];       str[n-i-1] = temp; }}

08.把二进制字符串转换为十进制

/*** @brief       把二进制字符串转换为十进制* @param       pbin:二进制* @retval      二进制字符串转换为十进制整数的结果*/static long lv_atk_bit_bin_to_dec(const char *pbin){ int ii=0; long result=0; while (pbin[ii] != 0) {       result = result * 2 + (pbin[ii] - '0');       ii++; } return result;}

09.将十进制转换为八进制

/*** @brief       将十进制转换为八进制* @param       n:十进制* @retval      返回八进制*/long lv_atk_dec_to_oct(long dec){ int oct = 0, i = 0;   i = 1; while (dec != 0) {       oct += (dec % 8) * i;       dec /= 8;       i *= 10; } return oct;}

10.十进制转二进制

/*** @brief       十进制转二进制* @param       n:十进制* @retval      返回二进制*/long lv_atk_bec_to_bin(long n){ long result=0,k=1,i,temp;   temp = n; while(temp) {       i = temp%2;       result = k * i + result;       k = k*10;       temp = temp/2; }   printf("%ld\n", result); return result;}

11.十六进制转十进制

/*** @brief       十六进制转十进制* @param       n:十六进制* @retval      返回十进制*/long lv_atk_hex_to_dex(char*s){ int i,t; long sum=0; for(i=0;s[i];i++) { if(s[i]>= '0'  &&s[i]<='9')/* 当字符是'0'--'9'时,*-‘0'就行了 */ {           t=s[i]-'0'; } if(s[i]>='a'&&s[i]<='z') {           t=s[i]-'a'+10;/* 当字符是 abcdef 时,*-‘a’+10 就行了 */ } if(s[i]>='A'&&s[i]<='Z') {           t=s[i]-'A'+10;/* 当字符是 ABCDEF 时,*-‘A’+10 就行了 */ }       sum=sum*16+t; } return sum;}

12.八进制转十进制

/*** @brief       八进制转十进制* @param       n:八进制的数值* @retval      返回十进制*/long lv_atk_oct_to_dex(long n){ int i=0,tmp,sum=0; while(n) {       tmp=n%10;       n=n/10;       sum+=tmp*pow(8,i);       i++; }   printf("%d",sum); return sum;}

13.RAM计算前导零指令(__clz)使用C语言编写

int lv_clz(unsigned int  app_readly_list[]){ int bit = 0; for (int i = 0; i < 32; i++) { if (app_readly_list[i] == 1) { break; }       bit ++ ; } return bit;}

14.获取一个字的高位和低位字节

#define VALUE_L(x) ((byte) ((word)(x) & 255))#define VALUE_H(x) ((byte) ((word)(x) >> 8))

15.从一个结构的成员指针找到其容器的指针

#define os_container_of(ptr, type, member)      \   ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))

16.获取按指定宽度对齐的向下数

#define ALIGN_DOWN(size, align)      ((size) & ~((align) - 1))

17.获取按指定宽度对齐的向上数

#define ALIGN_UP(size, align)        (((size) + (align) - 1) & ~((align) - 1))

18.程序定位断言

标签: #c语言数字函数 #c语言函数必须有什么 #c语言断言函数的作用 #c语言最大值函数怎么使用 #c语言的pow函数怎么用