C语言造轮子

/*获取数值的位数*/
int32_t GetNumBits(uint64_t num)
{
    char aTmp[19] = { 0 };

    return sprintf(aTmp,"%llu",num);
}

/*8 位 BCD 数据转换为 10 进制数据*/
void BCD8421_To_Dec_Uint8(uint8_t *pData, size_t size)
{
    uint8_t tmp = 0;
	
    if(pData == NULL){ return; }
    if(size == 0){ return; }

    for (uint32_t i = 0; i<size; i++)
    {
        tmp = pData[i] & 0x0f;
        pData[i] = ((pData[i] & 0xf0) >> 0x04) * 10 + tmp;
    }
}
/*8 位 10 进制数据转换为 BCD 数据*/
void Dec_Uint8_To_BCD8421(uint8_t *pData,size_t size)
{
    uint8_t tmp = 0;
	
    if(pData == NULL){ return; }
    if(size == 0){ return; }

    for (uint32_t i = 0; i < size; i++)
    {
        tmp = pData[i] / 10;
        pData[i] = (tmp << 0x04) | (pData[i] % 10);
    }
}

/*数据进一法取整*/
uint32_t Ceil(float val)
{
    if (val > (float)((uint32_t)val))
    {
        return ((uint32_t)val + 1);
    }
    return (uint32_t)val;
}

/*统计字符个数(可防止溢出)*/
uint32_t CharNumStatistics_s(const char *str,uint8_t size)
{
  //en:英文字符,ch:中文字符
  uint32_t en = 0,ch = 0;
  char c = 0;
  
  while((*str != '\0') && (size--))
  {
    c = *str++;
    if((c & 0x80) && (*str & 0x80))
    {
      ch++;
      str++;
      size--;
    }
    else
    {
      en++;
    }
  }
  
  return (en + ch);
}
/*统计字符个数(不可防止溢出)*/
void CharNumStatistics(const char *str,uint32_t *pEn,uint32_t *pCh)
{
  //en:英文字符,ch:中文字符
  uint32_t en = 0,ch = 0;
  char c = 0;
  
  while(*str != '\0')
  {
    c = *str++;
    if((c & 0x80) && (*str & 0x80))
    {
      ch++;
      str++;
    }
    else if(!(c & 0x80))
    {
      en++;
    }
  }
  
  *pEn = en;
  *pCh = ch;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值