-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcharconv_demo.cpp
77 lines (59 loc) · 3.29 KB
/
charconv_demo.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright (c) Microsoft Corporation.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// Demos MSVC STL implementation for https://wg21.link/P0067R5
#include <array>
#include <charconv>
#include <iostream>
#include <string_view>
#include <system_error>
void to_chars_demo()
{
std::cout << "\nto_chars:\n";
std::array<char, 20> chars_array;
std::to_chars_result result = std::to_chars(chars_array.data(), chars_array.data() + chars_array.size(), 727);
std::cout << std::string_view(chars_array.data(), result.ptr - chars_array.data())
<< "; ec: " << static_cast<int>(result.ec) << std::endl;
result = std::to_chars(chars_array.data(), chars_array.data() + chars_array.size(), 727, 16 /* hex */);
std::cout << std::string_view(chars_array.data(), result.ptr - chars_array.data())
<< "; ec: " << static_cast<int>(result.ec) << std::endl;
result = std::to_chars(chars_array.data(), chars_array.data() + chars_array.size(), 727, 2 /* binary */);
std::cout << std::string_view(chars_array.data(), result.ptr - chars_array.data())
<< "; ec: " << static_cast<int>(result.ec) << std::endl;
result = std::to_chars(chars_array.data(), chars_array.data() + chars_array.size(), 22 / 7.0);
std::cout << std::string_view(chars_array.data(), result.ptr - chars_array.data())
<< "; ec: " << static_cast<int>(result.ec) << std::endl;
result = std::to_chars(chars_array.data(), chars_array.data() + chars_array.size(), 72230340329497.0, std::chars_format::scientific, 6);
std::cout << std::string_view(chars_array.data(), result.ptr - chars_array.data())
<< "; ec: " << static_cast<int>(result.ec) << std::endl;
}
void from_chars_demo()
{
std::cout << "\nfrom_chars:\n";
double value;
// For simplicity, we'll reuse one char array of 4 elements for input
std::array chars_array = std::to_array("2020");
std::from_chars_result result = std::from_chars(chars_array.data(), chars_array.data() + chars_array.size(), value);
std::cout << value << "; ec: " << static_cast<int>(result.ec) << std::endl;
chars_array = std::to_array("3.14");
result = std::from_chars(chars_array.data(), chars_array.data() + chars_array.size(), value);
std::cout << value << "; ec: " << static_cast<int>(result.ec) << std::endl;
chars_array = std::to_array("12e4"); // scientific 12x10^4
result = std::from_chars(chars_array.data(), chars_array.data() + chars_array.size(), value, std::chars_format::scientific);
std::cout << value << "; ec: " << static_cast<int>(result.ec) << std::endl;
chars_array = std::to_array("abcd"); // hex for 43981
result = std::from_chars(chars_array.data(), chars_array.data() + chars_array.size(), value, std::chars_format::hex);
std::cout << value << "; ec: " << static_cast<int>(result.ec) << std::endl;
chars_array = std::to_array("0101"); // binary for 5
short binary_value;
result = std::from_chars(chars_array.data(), chars_array.data() + chars_array.size(), binary_value, 2);
std::cout << binary_value << "; ec: " << static_cast<int>(result.ec) << std::endl;
chars_array = std::to_array("nval"); // invalid input
result = std::from_chars(chars_array.data(), chars_array.data() + chars_array.size(), value);
std::cout << value << "; ec: " << static_cast<int>(result.ec) << std::endl;
}
void charconv_demo()
{
std::cout << "\nElementary string conversion demo:\n";
to_chars_demo();
from_chars_demo();
}