一些常用的工具函数(附C代码)
点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记!
在我们平时的学习、工作中,我们应该多做一些总结归纳,把一些自己学过的,用过的知识,尽量做一些归纳。比如我们做软件方面的工作,我们可以建立自己的一个代码仓库,专门用于保存一些经过验证过的代码,方便下次需要用到的时候可以搬过来,有助于提高我们的开发效率。
下面分享几个常用的工具函数,我们可以把他们统一存放在一个.c文件中,等到我们的工程需要用到的时候直接添加就可以。
1、计算字符串长度
左右滑动查看全部代码>>>
/*
**************************************************************************************
* 函 数 名: str_len
* 功能说明: 计算字符串长度,0是结束符
* 形 参: _str : 缓冲区
* 返 回 值: 无
**************************************************************************************
*/
int str_len(char *_str)
{
int len = 0;
while (*_str++) len++;
return len;
}
2、复制字符串
左右滑动查看全部代码>>>
/*
***************************************************************************************
* 函 数 名: str_cpy
* 功能说明: 复制字符串
* 形 参: tar : 目标缓冲区
* src : 源缓冲区
* 返 回 值: 无
***************************************************************************************
*/
void str_cpy(char *_tar, char *_src)
{
do
{
*_tar++ = *_src;
}
while (*_src++);
}
3、字符串比较
左右滑动查看全部代码>>>
/*
**************************************************************************************
* 函 数 名: str_cmp
* 功能说明: 字符串比较
* 形 参: s1 : 字符串1
* s2 : 字符串2
* 返 回 值: 0 表示相等 非0表示不等
**************************************************************************************
*/
int str_cmp(char * s1, char * s2)
{
while ((*s1!=0) && (*s2!=0) && (*s1==*s2))
{
s1++;
s2++;
}
return *s1 - *s2;
}
4、填充缓冲区每个单元为固定值
左右滑动查看全部代码>>>
/*
**************************************************************************************
* 函 数 名: mem_set
* 功能说明: 填充缓冲区每个单元为固定值
* 形 参: _tar : 目标缓冲区;_data : 数据字节;_len : 数据长度
* 返 回 值: 无
**************************************************************************************
*/
void mem_set(char *_tar, char _data, int _len)
{
while (_len--)
{
*_tar++ = _data;
}
}
5、将有符号整数转换为ASCII字符串
左右滑动查看全部代码>>>
/*
**************************************************************************************
* 函 数 名: int_to_ascii
* 功能说明: 将整数转换为ASCII数组。支持负数。
* 形 参: _Number : 整数
* _pBuf : 目标缓冲区, 存放转换后的结果。以0结束的字符串。
* _len : ASCII字符个数, 字符串长度
* 返 回 值: 无
**************************************************************************************
*/
void int_to_str(int _iNumber, char *_pBuf, unsigned char _len)
{
unsigned char i;
int iTemp;
if (_iNumber < 0) /* 负数 */
{
iTemp = -_iNumber; /* 转为正数 */
}
else
{
iTemp = _iNumber;
}
mem_set(_pBuf, ' ',_len);
/* 将整数转换为ASCII字符串 */
for (i = 0; i < _len; i++)
{
_pBuf[_len - 1 - i] = (iTemp % 10) + '0';
iTemp = iTemp / 10;
if (iTemp == 0)
{
break;
}
}
_pBuf[_len] = 0;
if (_iNumber < 0) /* 负数 */
{
for (i = 0; i < _len; i++)
{
if ((_pBuf[i] == ' ') && (_pBuf[i + 1] != ' '))
{
_pBuf[i] = '-';
break;
}
}
}
}
6、将10进制形式的ASCII码字符串转换成整数
左右滑动查看全部代码>>>
/*
*************************************************************************************
* 函 数 名: str_to_int
* 功能说明: 将ASCII码字符串转换成整数。遇到小数点自动越过。"12.34"转换结果为1234
* 形 参: _pStr :待转换的ASCII码串. 可以以逗号,#或0结束。
* 返 回 值: 二进制整数值
*************************************************************************************
*/
int str_to_int(char *_pStr)
{
unsigned char flag;
char *p;
int ulInt;
unsigned char i;
unsigned char ucTemp;
p = _pStr;
if (*p == '-')
{
flag = 1; /* 负数 */
p++;
}
else
{
flag = 0;
}
ulInt = 0;
for (i = 0; i < 15; i++)
{
ucTemp = *p;
if (ucTemp == '.') /* 遇到小数点,自动跳过1个字节 */
{
p++;
ucTemp = *p;
}
if ((ucTemp >= '0') && (ucTemp <= '9'))
{
ulInt = ulInt * 10 + (ucTemp - '0');
p++;
}
else
{
break;
}
}
if (flag == 1)
{
return -ulInt;
}
return ulInt;
}
7、将2字节数组转换为16位无符号整数
左右滑动查看全部代码>>>
/*
**************************************************************************************
* 函 数 名: BEBufToUint16
* 功能说明: 将2字节数组(大端Big Endian次序,高字节在前)转换为16位整数
* 形 参: _pBuf : 数组
* 返 回 值: 16位整数值
*
* 大端(Big Endian)与小端(Little Endian)
**************************************************************************************
*/
uint16_t BEBufToUint16(uint8_t *_pBuf)
{
return (((uint16_t)_pBuf[0] << 8) | _pBuf[1]);
}
/*
**************************************************************************************
* 函 数 名: LEBufToUint16
* 功能说明: 将2字节数组(小端Little Endian,低字节在前)转换为16位整数
* 形 参: _pBuf : 数组
* 返 回 值: 16位整数值
**************************************************************************************
*/
uint16_t LEBufToUint16(uint8_t *_pBuf)
{
return (((uint16_t)_pBuf[1] << 8) | _pBuf[0]);
}
8、将4字节数组转换为32位整数
左右滑动查看全部代码>>>
/*
**************************************************************************************
* 函 数 名: BEBufToUint32
* 功能说明: 将4字节数组(大端Big Endian次序,高字节在前)转换为32位整数
* 形 参: _pBuf : 数组
* 返 回 值: 32位整数值
*
* 大端(Big Endian)与小端(Little Endian)
**************************************************************************************
*/
uint32_t BEBufToUint32(uint8_t *_pBuf)
{
return (((uint32_t)_pBuf[0] << 24) | ((uint32_t)_pBuf[1] << 16) | ((uint32_t)_pBuf[2] << 8) | _pBuf[3]);
}
/*
**************************************************************************************
* 函 数 名: LEBufToUint32
* 功能说明: 将4字节数组(小端Little Endian,低字节在前)转换为32位整数
* 形 参: _pBuf : 数组
* 返 回 值: 32位整数值
**************************************************************************************
*/
uint32_t LEBufToUint32(uint8_t *_pBuf)
{
return (((uint32_t)_pBuf[3] << 24) | ((uint32_t)_pBuf[2] << 16) | ((uint32_t)_pBuf[1] << 8) | _pBuf[0]);
}
以上就是今天分享的几个常用的工具函数。可在后台回复关键词: 工具函数
,获取相关的.c文件。
猜你喜欢:
我的个人博客:
https://zhengnianli.github.io
查看往期笔记:
聊天界面输入m获取往期笔记目录