将字符串转换为浮点数
Convert string to float
我正在使用 AtmelStudio 在 AVR XMEGA 微控制器上编程。
我在将字符串转换为浮点数时遇到问题。该字符串名为 token2
,值为 "8.604165"
我已经尝试了几个功能:
float lon = atof(token2); printf("lon=%f", lon);
returns lon=?
float lon = strtod(token2, NULL); printf("lon=%f", lon);
returns lon=?
float lon = strtof(token2, NULL); printf("lon=%f", lon);
报错undefined reference to strtof
,甚至包括<stdlib.h>
我是不是做错了什么?
默认情况下,AVR-libc 尝试在二进制文件中保存 space,而不是 link 浮点相关的内容。对于像 atof
这样的函数,这很容易,因为如果你不调用它们,那么 linker 就不会包含它们。但是,对于 printf
,linker 无法判断您是否打算将其用于浮点数。
相反,AVR-libc 有多个定义 printf
的库。默认库中的 printf
除了不支持浮点数外,具有完整的功能。如果你想在你的二进制文件中保存 space 并且你没有使用 printf
的更高级的功能(即格式标志),你可以 link 和 printf_min
来替换那个更小的版本。如果要打印浮点数,则需要 printf_flt
.
中定义的全功能版本
This page 描述了 linker 对 select 这些替代版本的正确选择。简而言之,将 -Wl,-u,vfprintf -lprintf_flt -lm
添加到 linker 选项中。
好的,这是微控制器特有的东西。
与@Sneftel 所说的类似,我只需要在 AtmelStudio 中添加库 libprintf_flt.a
和 libm.a
。
我正在使用 AtmelStudio 在 AVR XMEGA 微控制器上编程。
我在将字符串转换为浮点数时遇到问题。该字符串名为 token2
,值为 "8.604165"
我已经尝试了几个功能:
float lon = atof(token2); printf("lon=%f", lon);
returnslon=?
float lon = strtod(token2, NULL); printf("lon=%f", lon);
returnslon=?
float lon = strtof(token2, NULL); printf("lon=%f", lon);
报错undefined reference to strtof
,甚至包括<stdlib.h>
我是不是做错了什么?
默认情况下,AVR-libc 尝试在二进制文件中保存 space,而不是 link 浮点相关的内容。对于像 atof
这样的函数,这很容易,因为如果你不调用它们,那么 linker 就不会包含它们。但是,对于 printf
,linker 无法判断您是否打算将其用于浮点数。
相反,AVR-libc 有多个定义 printf
的库。默认库中的 printf
除了不支持浮点数外,具有完整的功能。如果你想在你的二进制文件中保存 space 并且你没有使用 printf
的更高级的功能(即格式标志),你可以 link 和 printf_min
来替换那个更小的版本。如果要打印浮点数,则需要 printf_flt
.
This page 描述了 linker 对 select 这些替代版本的正确选择。简而言之,将 -Wl,-u,vfprintf -lprintf_flt -lm
添加到 linker 选项中。
好的,这是微控制器特有的东西。
与@Sneftel 所说的类似,我只需要在 AtmelStudio 中添加库 libprintf_flt.a
和 libm.a
。