
- C++ Library - Home
- C++ Library - <fstream>
- C++ Library - <iomanip>
- C++ Library - <ios>
- C++ Library - <iosfwd>
- C++ Library - <iostream>
- C++ Library - <istream>
- C++ Library - <ostream>
- C++ Library - <sstream>
- C++ Library - <streambuf>
- C++ Library - <atomic>
- C++ Library - <complex>
- C++ Library - <exception>
- C++ Library - <functional>
- C++ Library - <limits>
- C++ Library - <locale>
- C++ Library - <memory>
- C++ Library - <new>
- C++ Library - <numeric>
- C++ Library - <regex>
- C++ Library - <stdexcept>
- C++ Library - <string>
- C++ Library - <thread>
- C++ Library - <tuple>
- C++ Library - <typeinfo>
- C++ Library - <utility>
- C++ Library - <valarray>
- The C++ STL Library
- C++ Library - <array>
- C++ Library - <bitset>
- C++ Library - <deque>
- C++ Library - <forward_list>
- C++ Library - <list>
- C++ Library - <map>
- C++ Library - <multimap>
- C++ Library - <queue>
- C++ Library - <priority_queue>
- C++ Library - <set>
- C++ Library - <stack>
- C++ Library - <unordered_map>
- C++ Library - <unordered_set>
- C++ Library - <vector>
- C++ Library - <algorithm>
- C++ Library - <iterator>
- The C++ Advanced Library
- C++ Library - <any>
- C++ Library - <barrier>
- C++ Library - <bit>
- C++ Library - <chrono>
- C++ Library - <cinttypes>
- C++ Library - <clocale>
- C++ Library - <condition_variable>
- C++ Library - <coroutine>
- C++ Library - <cstdlib>
- C++ Library - <cstring>
- C++ Library - <cuchar>
- C++ Library - <charconv>
- C++ Library - <cfenv>
- C++ Library - <cmath>
- C++ Library - <ccomplex>
- C++ Library - <expected>
- C++ Library - <format>
- C++ Library - <future>
- C++ Library - <flat_set>
- C++ Library - <flat_map>
- C++ Library - <filesystem>
- C++ Library - <generator>
- C++ Library - <initializer_list>
- C++ Library - <latch>
- C++ Library - <memory_resource>
- C++ Library - <mutex>
- C++ Library - <mdspan>
- C++ Library - <optional>
- C++ Library - <print>
- C++ Library - <ratio>
- C++ Library - <scoped_allocator>
- C++ Library - <semaphore>
- C++ Library - <source_location>
- C++ Library - <span>
- C++ Library - <spanstream>
- C++ Library - <stacktrace>
- C++ Library - <stop_token>
- C++ Library - <syncstream>
- C++ Library - <system_error>
- C++ Library - <string_view>
- C++ Library - <stdatomic>
- C++ Library - <variant>
- C++ STL Library Cheat Sheet
- C++ STL - Cheat Sheet
- C++ Programming Resources
- C++ Programming Tutorial
- C++ Useful Resources
- C++ Discussion
C++ charconv from_chars() Function
The std::from_chars() is used for converting character sequences into numeric values. Unlike traditional methods like std::stoi() or std::stringstream, std::from_chars() does not use locale settings, heap allocations, or exceptions, making it a lightweight alternative for performance-critical applications.
If no characters match the pattern or if the value obtained by parsing the matched characters is not representable in the type of value, value is unmodified, otherwise the characters matching the pattern are interpreted as a text representation of an arithmetic value, which is stored in value.
Syntax
Following is the syntax for std::from_chars() Function.
std::from_chars( const char* first, const char* last, T& value, int base = 10 );
Parameters
- first : Pointer to the beginning of the character sequence to convert.
- last : Pointer to one past the last character to be considered.
- value : Reference to a variable where the converted numerical value will be stored.
- base (optional) : The numerical base (2 to 36) used for conversion; defaults to 10.
Return Value
This function an object of type std::from_chars_result, which contains:
- ptr : A pointer to the first character not processed.
- ec : An error code (std::errc) indicating success or failure of the conversion.
Time Complexity
The time complexity of this function is constant, i.e.,O(n), where n is the length of the input character sequence being converted.
Example 1
In this example code the function function reads the numeric part of the string and stores it in value.
#include <iostream> #include <charconv> #include <system_error> int main() { const char str[] = "12345"; int value; auto result = std::from_chars(str, str + sizeof(str) - 1, value); if (result.ec == std::errc()) { std::cout << "Converted value: " << value << "\n"; } else { std::cout << "Conversion failed!\n"; } return 0; }
Output
Output of the above code is as follows
Converted value: 12345
Example 2
The following example, demonstrates handling invalid conversion by using std::from_chars() function which reads the initial valid numeric part (12) and stops when it encounters non-numeric characters (xyz).
#include <iostream> #include <charconv> #include <system_error> int main() { const char str[] = "12xyz"; int value; auto result = std::from_chars(str, str + sizeof(str) - 1, value); if (result.ec == std::errc()) { std::cout << "Converted value: " << value << "\n"; } else { std::cout << "Conversion failed!\n"; } return 0; }
Output
If we run the above code it will generate the following output
Converted value: 12
Example 3
This example demonstrates how to parse the hexadecimal values by using std::from_chars() function.
#include <iostream> #include <charconv> int main() { const char str[] = "1A3F"; int value; auto result = std::from_chars(str, str + sizeof(str) - 1, value, 16); if (result.ec == std::errc()) { std::cout << "Converted value (decimal): " << value << "\n"; } else { std::cout << "Conversion failed!\n"; } return 0; }
Output
Following is the output of the above code
Converted value (decimal): 6719