不同数据类型转换
头文件
int convert_float_to_str(char *dst, float data, uint16_t bitNum);
int convert_double_to_str(char *dst, double data, uint16_t bitNum);
源文件
/**
* @brief float转str
* @param dst 保存转换后的数据
* @param data 数据
* @param bitNum 保留位数
* @return
*/
int convert_float_to_str(char *dst, float data, uint16_t bitNum) {
data = data + 5.0 / pow(10, bitNum + 1);
int n = (int) data;
int s = (int) (((data - n)) * pow(10, bitNum));
static char fm_str[] = {"%d.%02d"};
fm_str[5] = bitNum + '0';
return sprintf(dst, fm_str, n, s);
}
/**
* @brief double转str
* @param dst 保存转换后的数据
* @param data 数据
* @param bitNum 保留位数
* @return
*/
int convert_double_to_str(char *dst, double data, uint16_t bitNum) {
data = data + 5.0 / pow(10, bitNum + 1);
int n = (int) data;
int s = (int) (((data - n)) * pow(10, bitNum));
static char fm_str[] = {"%d.%02d"};
fm_str[5] = bitNum + '0';
return sprintf(dst, fm_str, n, s);
}
示例
int main() {
char dstStr[100];
int len = convert_float_to_str(dstStr, 78.92f, 4);
printf("convert_float_to_str: len:%d,data:%s\r\n", len, dstStr); // convert_float_to_str: len:7,data:78.9200
return 0;
}
字节数组转字符串
头文件
int convert_u8_to_str(char *dst, const uint8_t *data, uint16_t data_len, char *fmt);
int convert_u8_to_dec_str(char *dst, const uint8_t *data, uint16_t data_len);
int convert_u8_to_hex_str(char *dst, const uint8_t *data, uint16_t len);
源文件
// 通用格式
int convert_u8_to_str(char *dst, const uint8_t *data, uint16_t data_len, char *fmt) {
int pos = 0;
int cpy_len;
for (int i = 0; i < data_len; ++i) {
cpy_len = sprintf(dst + pos, fmt, data[i]);
pos += cpy_len;
}
return pos;
}
// 字节数组转 10进制的字符串
int convert_u8_to_dec_str(char *dst, const uint8_t *data, uint16_t data_len) {
return convert_u8_to_str(dst, data, data_len, "%02d ");
}
// 字节数组转 16进制的字符串
int convert_u8_to_hex_str(char *dst, const uint8_t *data, uint16_t len) {
return convert_u8_to_str(dst, data, len, "%02X ");
}
示例
int main() {
uint8_t data[] = {12, 23, 45, 12, 23};
char dstStr[100];
int len = convert_u8_to_hex_str(dstStr, data, sizeof(data));
printf("convert_u8_to_hex_str len:%d data:%s\r\n", len, dstStr); // convert_u8_to_hex_str len:15 data:0C 17 2D 0C 17
len = convert_u8_to_dec_str(dstStr, data, sizeof(data));
printf("convert_u8_to_dec_str len:%d data:%s\r\n", len, dstStr); // convert_u8_to_dec_str len:15 data:12 23 45 12 23
return 0;
}