/*获取数值的位数*/
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;
}
C语言造轮子
最新推荐文章于 2022-01-13 14:47:35 发布