gpt4 book ai didi

c++ - 独立于语言环境的 "atof"?

转载 作者:IT老高 更新时间:2023-10-28 21:47:10 26 4
gpt4 key购买 nike

我正在解析固定 NMEA 句子中的 GPS 状态条目,其中地理分钟的一小部分总是在句点之后。但是,在语言环境将逗号定义为小数分隔符的系统上,atof 函数会忽略句点和整数部分。

处理此问题的最佳方法是什么?存储在字符数组中的长/纬度字符串,如果重要的话。

示例代码:

m_longitude = atof((char *)pField); 

在哪里

pField[] = "01000.3897"; 

跨平台项目,针对 Windows XP 和 CE 编译。

对解决方案的评论:

接受的答案更优雅,但 this答案(和评论)也值得作为快速解决方案了解

最佳答案

你总是可以使用(模错误检查):

#include <sstream>
...

float longitude = 0.0f;
std::istringstream istr(pField);

istr >> longitude;

默认情况下,标准 iostream 使用全局语言环境(反过来,它应该初始化为经典(美国)语言环境)。因此,除非有人先前已将全局语言环境更改为其他内容,否则上述内容通常应该有效,即使您在非英语平台上运行也是如此。要绝对确保使用了所需的语言环境,请创建一个特定的语言环境并在读取之前用该语言环境“灌输”流:

#include <sstream>
#include <locale>

...
float longitude = 0.0f;
std::istringstream istr(pField);

istr.imbue(std::locale("C"));
istr >> longitude;

作为旁注,我通常使用正则表达式来验证 NMEA 字段,提取字段的不同部分作为捕获,然后使用上述方法转换不同部分。 NMEA 经度字段中小数点之前的部分实际上被格式化为“DDDMM.mmm..”,其中 DDD 对应于度数,MM.mmm 对应于分钟(但我猜你已经知道了)。

关于c++ - 独立于语言环境的 "atof"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com