我想为嵌入式项目提供一个简单的浮点到字符串转换器,但不想使用浮点
snprintf
因为这会填满我的flash,所以我写了一个简单的转换函数。我真的不在乎小数的确切数字,也不在乎负值。这只是一个C++示例,我不想使用STL或其他C++特定函数,因为我在实际项目中确实受到空间限制。
#include <iostream>
#include <cstdio>
#include <cstring>
char msg[100];
typedef uint32_t u32;
char* floatToString(float value)
{
static char placeholder[100];
memset(placeholder, '\0', sizeof placeholder);
auto root = (u32) value;
auto decimals = (u32) (value * 1000) % 1000;
snprintf(placeholder, 100, "%lu.%lu", root,
decimals);
return placeholder;
}
float weirdVal = 11.35;
int main(){
snprintf(msg, 100, "%s,%s", floatToString(weirdVal), floatToString(64.876));
std::cout << msg << '\n';
return 0;
}
当我测试函数并调用它时,我总是首先得到传递的数字。我的输出是:
11.350,11.350