前言
<charconv>是C++17新的标准库头文件,包含了相关类和两个转换函数。可以完成传统的整数/浮点和字符串互相转换的功能(atoi、itoa、atof、sprintf等),同时支持输出格式控制、整数基底设置并且将整数和浮点类型对字符串的转换整合了起来。是独立于本地环境、不分配、不抛出的。目的是在常见的高吞吐量环境,例如基于文本的交换( JSON 或 XML )中,允许尽可能快的实现。
chars_format
chars_format是作为格式控制的类定义在<charconv>头文件中
enum class chars_format {
scientific = /*unspecified*/,
fixed = /*unspecified*/,
hex = /*unspecified*/,
general = fixed | scientific
};
用于为 std::to_chars 及 std::from_chars 指定浮点格式的位掩码类型 (BitmaskType) 。
from_chars
struct from_chars_result {
const char* ptr;
std::errc ec;
};
std::from_chars_result from_chars(const char* first, const char* last,
/*see below*/& value, int base = 10);
std::from_chars_result from_chars(const char* first, const char* last, float& value,
std::chars_format fmt = std::chars_format::general);
std::from_chars_result from_chars(const char* first, const char* last, double& value,
std::chars_format fmt = std::chars_format::general);
std::from_chars_result from_chars(const char* first, const char* last, long double& value,
std::chars_format fmt = std::chars_format::general);
first, last - 要分析的合法字符范围
value - 存储被分析值的输出参数,若分析成功
base - 使用的整数基底: 2 与 36 间的值(含上下限)。
fmt - 使用的浮点格式, std::chars_format 类型的位掩码
to_chars
struct to_chars_result {
char* ptr;
std::errc ec;
};
std::to_chars_result to_chars(char* first, char* last, value, int base = 10);
- 整数转字符串
first, last - 要写入的字符范围
value - 要转换到其字符串表示的值
base - 使用的整数基底: 取值范围[2,36]。
std::to_chars_result to_chars(char* first, char* last, float value,
std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, double value,
std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, long double value,
std::chars_format fmt, int precision);
- 浮点转字符串
fmt - 使用的浮点格式, std::chars_format 类型的位掩码
precision - 使用的浮点精度