Ce face std::to_chars
std::to_chars scrie cifrele unui număr în zona [inceput, sfarsit). Nu alocă memorie, nu depinde de setările de limbă (locale) și nu aruncă excepții, de aceea este cea mai rapidă conversie număr–text din C++.
Rezultatul are două câmpuri: ptr (unde s-a terminat textul scris) și ec (cod de eroare; std::errc{} înseamnă succes, std::errc::value_too_large înseamnă că nu a încăput). Nu se adaugă '\0'.
Pentru numere reale, fără format se scrie forma cea mai scurtă care, citită înapoi, dă exact același număr (0.1, nu 0.100000). Cu std::chars_format::fixed și o precizie alegi numărul de zecimale.
Parametri
| Parametru | Descriere |
|---|---|
inceput, sfarsit |
Zona de memorie în care se scrie. |
valoare |
Numărul convertit. |
baza |
Pentru întregi: baza (2–36). |
format, precizie |
Pentru numere reale: fixed, scientific, general, hex, cu numărul de zecimale. |
Ce returnează
Un std::to_chars_result cu câmpurile ptr și ec.
Exemple
Exemplul 1: Întregi și numere reale
#include <charconv>
#include <iostream>
#include <string_view>
int main() {
char buf[32];
auto r = std::to_chars(buf, buf + sizeof(buf), 2026);
std::cout << std::string_view(buf, r.ptr) << '\n';
r = std::to_chars(buf, buf + sizeof(buf), 255, 2);
std::cout << std::string_view(buf, r.ptr) << '\n';
r = std::to_chars(buf, buf + sizeof(buf), 0.1);
std::cout << std::string_view(buf, r.ptr) << '\n';
r = std::to_chars(buf, buf + sizeof(buf), 1299.456, std::chars_format::fixed, 2);
std::cout << std::string_view(buf, r.ptr) << '\n';
}
Rezultat
2026
11111111
0.1
1299.46
Exemplul 2: Spațiu insuficient
#include <charconv>
#include <iostream>
#include <system_error>
int main() {
char mic[4];
auto r = std::to_chars(mic, mic + sizeof(mic), 1234567);
if (r.ec == std::errc::value_too_large) {
std::cout << "Numărul nu încape în 4 caractere\n";
}
}
Rezultat
Numărul nu încape în 4 caractere
Greșeli frecvente
- Folosești tabloul ca șir C după
to_chars: nu există'\0'la final. Foloseștestd::string_view(buf, r.ptr)sau pune terminatorul lar.ptr. - Nu verifici
r.ec: dacă tabloul este prea mic, conținutul lui nu are sens.
Comenzi înrudite
std::from_chars: Citește un număr dintr-un text, foarte rapid, fără excepții, cu raport exact despre erori.std::to_string: Transformă un număr în std::string, de exemplu 42 în „42”.std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).std::snprintf: Scrie text formatat ca printf într-un tablou de char, fără să-i depășească mărimea.