【C编程】常用函数实现

/内存申请/

void os_memset(uint8_t *buf, uint8_t val, uint32_t len)
{
  while(len--)
  {
    *buf++ = val;
  }
}	

/内存复制/

void os_memcpy(uint8_t *dst, uint8_t *src, uint32_t len)
{
   uint8_t *p_dst= (uint8_t *)dst;
   uint8_t *p_src= (uint8_t *)src;	
   while(len--)
   {
     *p_dst++ = *p_src++;
   }
}
void os_memcpy32(uint32_t *dst, uint32_t *src, uint32_t len)
{
	os_assert
	uint32_t *p1=(uint32_t *)dst;
	uint32_t *p2=(uint32_t *)src;
	while (len)
    {
      *p1++ = *p2++;
	   if(len>=4)
		  len-=4;
	   else
		  len=0;
    }		
}
/*字符串比较*/

int os_strcmp(const uint8_t *str,  const uint8_t *ptr)  
{   
    while(*ptr!='\0')  
    {  
	  if(*str!= *ptr) return 0;
      ++str;  
      ++ptr;  
    }  
    if(*str=='\0') 
      return 1;
	else
	  return 0;	
}

/*在母字符串找子字符串*/
char os_strstr(char *str1, char *str2)
{   
    char *pstr1 = str1;
  	char *pstr2 = str2;   
  	while(*str1 != '\0')
  	{
  	    pstr1 = str1;
  	    pstr2 = str2;    
  	    do{if(*pstr2 == '\0')return str1;}
		while(*pstr1++ == *pstr2++);
  	    str1++;
  	}
  	return NULL;
}

/*字符串复制*/
void os_strcpy(char *dst, char *src)
{
    char *p_dst = dst;
    while(*src != '\0') *p_dst++ = *src++;
}

/多次方/

int os_pow(uint32_t x,uint32_t y)
{
	int result=1;
	int i;
	for(i=0;i<y;i++) result *= x;
	return result;
}

/指定内存容量字符串复制/

char *os_strncpy(char *s, const char *t, unsigned int n) 
{
	char *p = s;
	unsigned int i = 0;
	if (!s) return s;
	while (t && i < n) 
	{
	  *s++ = *t++;
	  i++;
	}
	if (!t) 
	{
	   do *s++ = '\0';
	   while (i++ < n);
	}
	return p;
}

/字符串拼接/

void os_strcat(char *dst, char *src)
{
    char *p_dst = dst;
    while(*p_dst != '\0')
    {
       p_dst++;
    }
    while(*src != '\0') *p_dst++ = *src++;
}

/字符数组比较/

char os_chararray_cmp(uint8_t *s1, uint8_t *s2, uint8_t len)
{
    uint8 i;   
    for(i = 0; i < len; i ++)
        if(s1[i] > s2[i]) return 1;
        else if(s1[i] < s2[i]) return 2;
    return 0;
}

/字符串占用空间/

int os_sizeof(const uint8_t *str)
{
	int size=0;
	while(*str != '\0')
	{
	  size++;
	  str++;
	}
	return size;
}

/字符串长度/

int os_strlen(const uint8_t *str)
{
   int len = 0;
   while(str[len] != '\0') ++len;
   return len;
}

/加减法函数/

int os_add_sub(bool flag,uint32_t a,uint32_t b)
{
   if(!flag)
   {
	  return a-b;
   }
   else
   {
      return a+b;
   }
}

/特定数组里找值/

int *os_findvalue(int *start,int *end,int value)
{
	while((start != end) && (*start != value)
		++start;
	return start;
}
int *os_maxvalue(uint32_t *p1,uint32_t *p2)
{
	if(*p1 > *p2) return p1;
	else return p2;
}

/数据交换函数/

void os_swap(uint32_t *p1,uint32_t *p2)
{
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

/判断是否是16进制/

int os_isxdigit(uint8_t ch)
{
 if((ch>='0' && ch<='9') || (ch>='a' && ch<='f') || (ch>='A' && ch<='F'))
	 return 1;
 else
	 return 0;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值