为何GCC编译下std::from_chars无法处理十六进制浮点数?
std::from_chars 能否处理十六进制浮点数?
测试代码:
#include <charconv> #include <string> #include <iostream> int main() { std::string s = "0X1.BC70A3D70A3D7P+6"; std::cout << "strtod: " << std::strtod(s.c_str(), nullptr) << std::endl; double d = 42; std::from_chars(s.data(), s.data() + s.size(), d, std::chars_format::general); std::cout << "from_chars: " << d << std::endl; }
Linux下GCC编译输出:
strtod: 111.11 from_chars: 0
不是std::from_chars无法处理十六进制浮点数,而是你传入的参数有误:
std::chars_format::general仅支持十进制浮点数解析,不包含十六进制格式的处理规则。- 要解析十六进制浮点数,必须指定
std::chars_format::hex作为格式参数。
修改关键代码如下:
std::from_chars(s.data(), s.data() + s.size(), d, std::chars_format::hex);
修改后重新编译运行,from_chars就能正确解析目标十六进制浮点数,输出结果会和strtod一致。
另外需要注意:GCC对std::from_chars浮点数解析的完整支持从GCC 8版本开始提供,若使用更早版本的GCC可能存在兼容性问题,但你的测试场景中核心问题是格式参数指定错误。
内容的提问来源于stack exchange,提问作者eyelash
相关产品推荐
相关产品推荐

