C语言中任意数字类型数字转换为字符串-函数指针

本文介绍了一种使用C语言编写的函数指针数组,根据不同数据类型(INT8、UINT8等)将数值转换为5位数字符串,并提供示例展示了如何在主函数中调用这些函数。
摘要由CSDN通过智能技术生成

在网络上实在找不到一个不报警告的通用函数,自己写了一个函数指针:

// 定义数据类型的枚举类型
typedef enum {
    INT8,
    UINT8,
    INT16,
    UINT16,
    INT32,
    UINT32,
    FLOAT,
} dataTypeEnum;

// 定义指针和指针数组
typedef void(*_param_to_string_func_ptr)(void *value, char *array);

// 我的使用场景是将数字转换为5位数,可以按照需求编写函数
void _param_to_string_int8(void *value, char *array) {
    int8 data = *(int8 *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

void _param_to_string_uint8(void *value, char *array) {
    uint8 data = *(uint8 *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

void _param_to_string_int16(void *value, char *array) {
    int16 data = *(int16 *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

void _param_to_string_uint16(void *value, char *array) {
    uint16 data = *(uint16 *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

void _param_to_string_int32(void *value, char *array) {
    int32 data = *(int32 *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

void _param_to_string_uint32(void *value, char *array) {
    uint32 data = *(uint32 *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

void _param_to_string_float(void *value, char *array) {
    int32 data = (int32) *(float *) value;
    for (uint8 i = 5; i > 0; i--) {
        array[i - 1] = data % 10 + 0x30;
        data /= 10;
    }
    array[5] = '\0';
}

_param_to_string_func_ptr param_to_string_func_array[] = {
        _param_to_string_int8,
        _param_to_string_uint8,
        _param_to_string_int16,
        _param_to_string_uint16,
        _param_to_string_int32,
        _param_to_string_uint32,
        _param_to_string_float
};


// 定义好函数指针数组就可以使用了,要注意枚举类型和函数指针数组是一一对应的
int main(){
    dataTypeEnum type = INT16;
    int16 param = 2345;
    char paramString[7];
    param_to_string_func_array[type](&param, paramString);

    printf(paramString);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值