将字符串转换为float

时间:2016-08-25 13:21:40

标签: c string floating-point microcontroller

我正在使用AtmelStudio对AVR XMEGA微控制器进行编程。

我在将字符串转换为浮点数时遇到问题。该字符串名为token2,其值为"8.604165"

我已经尝试了几个功能:

  • float lon = atof(token2); printf("lon=%f", lon);返回lon=?
  • float lon = strtod(token2, NULL); printf("lon=%f", lon);返回lon=?
  • float lon = strtof(token2, NULL); printf("lon=%f", lon);发出错误undefined reference to strtof,甚至包括<stdlib.h>

我做错了吗?

2 个答案:

答案 0 :(得分:5)

默认情况下,AVR-libc尝试通过不链接与浮点相关的内容来节省二进制文件中的空间。对于像atof这样的函数很容易,因为如果你不调用它们,那么链接器就不会包含它们。但是对于printf,链接器无法判断您是否计划将其用于浮点数。

相反,AVR-libc有多个定义printf的库。默认库中的printf具有完整功能,但它不支持浮点数。如果您想在二进制文件中节省空间并且没有使用printf的更高级功能(即格式标志),则可以使用printf_min链接以使用更小的版本替换它。如果要打印浮点数,则需要printf_flt中定义的完整动力版本。

This page描述了选择这些替代版本的正确链接器选项。简而言之,将-Wl,-u,vfprintf -lprintf_flt -lm添加到链接器选项中。

答案 1 :(得分:0)

好的,这是微控制器特有的。

与@Sneftel所说的类似,我只需在AtmelStudio中添加库libprintf_flt.alibm.a