C语言工具函数


工具类函数整理

收集整理一些工具类函数,方便拷贝调用

一、字符转换

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;
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值