搜索
bottom↓
回复: 2

C语言有哪些实用的函数

[复制链接]

出0入234汤圆

发表于 2022-1-24 17:15:49 | 显示全部楼层 |阅读模式
以下文章来源于:公众号:开源电子网,读取更多技术文章,请扫码关注
讨论发帖图.png



C语言有哪些实用的函数



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

  1. #define

  2. FILE_ASSERT(term)                                             

  3. do                                 

  4. {                                                            

  5.     if (!(term))                     

  6. {                                                   

  7.         printf("Assert failed. Condition(%s). [%s][%d]\r\n",

  8. term, __FUNCTION__, __LINE__);                 \

  9. while(1)                                                         {                                                                ;                                                       }                                               

  10.     }                                    

  11. } while (0)
复制代码

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

  1. <font size="2">#define SITE_B( x ) ( *( (byte *) (x) ) )

  2. #define SITE _W( x ) ( *( (word *) (x) ) )</font>
复制代码


03. 计算最大值和最小值
  1. <font size="2">#define LV_MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )

  2. #define LV_MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )</font>
复制代码

04. 将一个字母转换为大写
  1. <font size="2">#define CAPITAL( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )</font>
复制代码


05. 获取数组元素的个数
  1. <font size="2">#define MY_SIZE( x ) ( sizeof( (x) ) / sizeof( (x[0]) ) )</font>
复制代码

06. 颜色转换

  1. #define RGB888_turn_monochrome(color)        ((color)?0:1)



  2. #define RGB888_turn_RGB233(color)            ((((color&0xff0000)>>22) << 6) +

  3.                                                     (((color&0xff00)>>13) << 3) +

  4. (((color&0xff)>>5)))



  5. #define RGB888_turn_RGB565(color)             ((((color&0xff0000)>>19) << 11) +

  6.                                                     (((color&0xff00)>>10) << 5) +

  7. (((color&0xff)>>3)))



  8. int LV_RGB888(uint32_t color)

  9. {

  10.     int ret=0;

  11.     switch(cfgColorDepth)

  12.     {

  13.     case 1: // 颜色深度1,单色

  14.     {

  15.         ret= RGB888_turn_monochrome(color);

  16.         break;

  17.     }

  18.     case 8: // 颜色深度8,RGB233

  19.     {

  20.         ret= RGB888_turn_RGB233(color);

  21.         break;

  22.     }

  23.     case 16: // 颜色深度16,RGB565

  24.     {

  25.         ret= RGB888_turn_RGB565(color);

  26.         break;

  27.     }

  28.     case 24: // 颜色深度24,RGB888

  29.     {

  30.         ret= color;

  31.         break;

  32.     }

  33.     default:

  34.         break;

  35.     }

  36.     return ret;

  37. }
复制代码


07. 二进制字符串转换为十进制整数
  1. <font size="2">/**

  2. * @brief       二进制字符串转换为十进制整数

  3. * @param       str:待反转的字符串

  4. * @retval      反转字符串

  5. */

  6. static void lv_atk_bit_str_reverse(char str[])

  7. {

  8.     int n=strlen(str);

  9.     int i;

  10.     char temp;



  11.     for (i = 0;i < (n/2); i++)

  12.     {

  13.         temp = str;

  14.         str = str[n-i-1];

  15.         str[n-i-1] = temp;

  16.     }

  17. }</font>
复制代码


08. 把二进制字符串转换为十进制
  1. <font size="2">/**

  2. * @brief       把二进制字符串转换为十进制

  3. * @param       pbin:二进制

  4. * @retval      二进制字符串转换为十进制整数的结果

  5. */

  6. static long lv_atk_bit_bin_to_dec(const char *pbin)

  7. {

  8.     int ii=0;

  9.     long result=0;



  10.     while (pbin[ii] != 0)

  11.     {

  12.         result = result * 2 + (pbin[ii] - '0');

  13.         ii++;

  14.     }



  15.     return result;

  16. }</font>
复制代码


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

  1. /**

  2. * @brief       将十进制转换为八进制

  3. * @param       n:十进制

  4. * @retval      返回八进制

  5. */

  6. long lv_atk_dec_to_oct(long dec)

  7. {

  8.     int oct = 0, i = 0;



  9.     i = 1;



  10.     while (dec != 0)

  11.     {

  12.         oct += (dec % 8) * i;

  13.         dec /= 8;

  14.         i *= 10;

  15.     }



  16.     return oct;

  17. }



  18. 10

  19. 十进制转二进制

  20. /**

  21. * @brief       十进制转二进制

  22. * @param       n:十进制

  23. * @retval      返回二进制

  24. */

  25. long lv_atk_bec_to_bin(long n)

  26. {



  27.     long result=0,k=1,i,temp;

  28.     temp = n;



  29.     while(temp)

  30.     {

  31.         i = temp%2;

  32.         result = k * i + result;

  33.         k = k*10;

  34.         temp = temp/2;

  35.     }

  36.     printf("%ld\n", result);

  37.    

  38.     return result;

  39. }
复制代码


11. 十六进制转十进制
  1. <font size="2">/**

  2. * @brief       十六进制转十进制

  3. * @param       n:十六进制

  4. * @retval      返回十进制

  5. */

  6. long lv_atk_hex_to_dex(char*s)

  7. {

  8.     int i,t;

  9.     long sum=0;



  10.     for(i=0;s;i++)

  11.     {

  12.         if(s>= '0'  &&s<='9')/* 当字符是'0'--'9'时,*-‘0'就行了 */

  13.         {

  14.             t=s-'0';

  15.         }

  16.       

  17.         if(s>='a'&&s<='z')

  18.         {

  19.             t=s-'a'+10;/* 当字符是 abcdef 时,*-‘a’+10 就行了 */

  20.         }

  21.       

  22.         if(s>='A'&&s<='Z')

  23.         {

  24.             t=s-'A'+10;/* 当字符是 ABCDEF 时,*-‘A’+10 就行了 */

  25.         }

  26.       

  27.         sum=sum*16+t;

  28.     }

  29.    

  30.     return sum;

  31. }</font>
复制代码


12. 八进制转十进制
  1. <font size="2">/**

  2. * @brief       八进制转十进制

  3. * @param       n:八进制的数值

  4. * @retval      返回十进制

  5. */

  6. long lv_atk_oct_to_dex(long n)

  7. {

  8.     int i=0,tmp,sum=0;



  9.     while(n)

  10.     {

  11.         tmp=n%10;

  12.         n=n/10;

  13.         sum+=tmp*pow(8,i);

  14.         i++;

  15.     }

  16.    

  17.     printf("%d",sum);

  18.    

  19.     return sum;

  20. }</font>
复制代码


13. RAM计算前导零指令(__clz)使用C语言编写
  1. <font size="2">int lv_clz(unsigned int  app_readly_list[])

  2. {

  3.     int bit = 0;



  4.     for (int i = 0; i < 32; i++)

  5.     {

  6.         if (app_readly_list == 1)

  7.         {

  8.             break;

  9.         }



  10.         bit ++ ;

  11.     }



  12.     return bit;

  13. }</font>
复制代码


14. 获取一个字的高位和低位字节
  1. <font size="2">#define VALUE_L(x) ((byte) ((word)(x) & 255))

  2. #define VALUE_H(x) ((byte) ((word)(x) >> 8))</font>
复制代码


15. 从一个结构的成员指针找到其容器的指针
  1. <font size="2">#define os_container_of(ptr, type, member)      \

  2.     ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))</font>
复制代码


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

  1. <font size="2">#define ALIGN_DOWN(size, align)      ((size) & ~((align) - 1))</font>
复制代码


17. 获取按指定宽度对齐的向上数
  1. #define ALIGN_UP(size, align)        (((size) + (align) - 1) & ~((align) - 1))
复制代码


18. 程序定位断言

          1.jpg

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入25汤圆

发表于 2022-1-25 06:46:11 来自手机 | 显示全部楼层
能不能用论坛code功能编辑一下,方便后人阅读

出0入76汤圆

发表于 2022-2-8 21:17:49 | 显示全部楼层
确实排版看着比较难受
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 20:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表