在网络上实在找不到一个不报警告的通用函数,自己写了一个函数指针:
// 定义数据类型的枚举类型
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](¶m, paramString);
printf(paramString);
}