文章目录
工具类函数整理
收集整理一些工具类函数,方便拷贝调用
一、字符转换
1.1、_itoa # int转字符串
/// @brief 整数转字符串
/// @param str 输出字符
/// @param num 输入整数
/// @return 字符长度
int _itoa(char *str, int num)
{
int offset = 0;
if (num < 0)
{
num = -num;
str[offset++] = '-';
}
char tmp[20];
int n = 0;
if (num == 0)
{
str[offset++] = '0';
}
else
{
while (num)
{
tmp[n++] = (num % 10) + '0';
num /= 10;
}
for (int i = n - 1; i >= 0; i--)
{
str[offset++] = tmp[i];
}
}
str[offset] = 0;
return offset;
}
1.2、_ftoa # float 转字符串
/// @brief 浮点数转字符串
/// @param result 输出字符串
/// @param inum 输入浮点数
/// @param precision 保留小数部分的位数
/// @return 字符串长度
int _ftoa(char *result, float inum, int precision)
{
int offset = 0;
float num = inum;
// 处理负数
if (num < 0)
{
num = -num;
result[offset++] = '-';
}
if (precision > 6)
precision = 6;
int pw = 1;
for (int i = 0; i < precision; i++)
{
pw *= 10;
}
int data = _roundf(num * pw);
char tmp[20];
int n = _itoa(tmp, data);
if (n > precision)
{
for (int i = 0; i < n - precision; i++)
{
result[offset++] = tmp[i];
}
result[offset++] = '.';
for (int i = n - precision; i < n; i++)
{
result[offset++] = tmp[i];
}
}
else if (n == precision)
{
result[offset++] = '0';
result[offset++] = '.';
for (int i = 0; i < n; i++)
{
result[offset++] = tmp[i];
}
}
else
{
result[offset++] = '0';
result[offset++] = '.';
for (int i = 0; i < precision - n; i++)
{
result[offset++] = '0';
}
for (int i = 0; i < n; i++)
{
result[offset++] = tmp[i];
}
}
result[offset] = 0;
return offset;
}
1.3、_itoh # 整数转hex字符串
/// @brief 整数转16进制字符
/// @param result 字符串结果
/// @param inum 输入数据
/// @return 字符串长度
int _itoh(char *result, int inum)
{
int offset = 0;
unsigned int num = inum;
char tmp[20];
int n = 0;
if (num == 0)
{
result[offset++] = '0';
}
else
{
while (num)
{
tmp[n++] = (num % 16) > 9 ? (num % 16) - 10 + 'A' : (num % 16) + '0';
num /= 16;
}
for (int i = n - 1; i >= 0; i--)
{
result[offset++] = tmp[i];
}
}
result[offset] = 0;
printf("inum:%X\tresult: %s\n", inum, result);
return offset;
}
1.4、_scopy # 字符串拷贝
/// @brief 字符串拷贝
/// @param dest 拷贝目标
/// @param src 拷贝来源
/// @return 字符串数量
int _scopy(char *dest, const char *src)
{
int i = 0;
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return i;
}
1.5、byte2hex # 字节转16进制字符
/// @brief 转换字节为16进制字符串
/// @param str 输出字符
/// @param data 输入数据
/// @return
int byte2hex(char *str, unsigned char data)
{
char high = data >> 4;
char low = data & 0x0F;
str[0] = (high < 10) ? high + '0' : (high - 10) + 'A';
str[1] = (low < 10) ? low + '0' : (low - 10) + 'A';
return 2;
}
1.6、hex2byte # 16进制字符转字节数据
/// @brief 转换16进制字符串转换成对应的数据(未检查合法性)
/// @param hex 16进制字符
/// @return 抓换结果数据
unsigned char hex2byte(char *hex)
{
unsigned char high = (hex[0] > '9') ? (hex[0] - 'A' + 10) : (hex[0] - '0'); // 大写字母
unsigned char low = (hex[1] > '9') ? (hex[1] - 'A' + 10) : (hex[1] - '0'); // 小写字母
return (high << 4) | low;
}
二、通用函数
2.1、_roundf # 四舍五入取整
int _roundf(float inum)
{
int isNegative = 1;
float num = inum;
if (num < 0)
{
num = -num;
isNegative = -1;
}
int val = (int)(num + 0.5f) * isNegative;
return val;
}