Fast integer to string and string to integer conversion functions.
CharConv.h
exposes two functions: to_chars
and from_chars
. The API is
similar, but not identical to that of
to_chars and
from_chars in the C++17
standard.
-
to_chars_result to_chars(char *first, char *last, int32_t value) noexcept
-
to_chars_result to_chars(char *first, char *last, uint32_t value) noexcept
-
to_chars_result to_chars(char *first, char *last, int64_t value) noexcept
-
to_chars_result to_chars(char *first, char *last, uint64_t value) noexcept
Converts
value
into characters in base 10. -
from_chars_result from_chars(const char *first, const char *last, int32_t &value) noexcept
-
from_chars_result from_chars(const char *first, const char *last, uint32_t &value) noexcept
-
from_chars_result from_chars(const char *first, const char *last, int64_t &value) noexcept
-
from_chars_result from_chars(const char *first, const char *last, uint64_t &value) noexcept
Converts the character sequence
[first, last]
representing a base 10 number to an integer value.
using namespace rigtorp;
std::array<char, 32> buf = {};
to_chars(buf.begin(), buf.end(), 123));
std::cout << buf.data();
int result;
from_chars(buf.begin(), buf.end(), result);
std::cout << result;
Running on Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz:
2017-12-26 15:08:09
Run on (32 X 3000 MHz CPU s)
CPU Caches:
L1 Data 32K (x16)
L1 Instruction 32K (x16)
L2 Unified 256K (x16)
L3 Unified 20480K (x2)
-----------------------------------------------------------------
Benchmark Time CPU Iterations
-----------------------------------------------------------------
BM_sprintf/1 73 ns 73 ns 9625985
BM_sprintf/2 75 ns 75 ns 9284410
BM_sprintf/3 77 ns 77 ns 9135939
BM_sprintf/4 79 ns 79 ns 8868328
BM_sprintf/5 80 ns 80 ns 8716034
BM_sprintf/6 82 ns 82 ns 8561608
BM_sprintf/7 83 ns 83 ns 8426476
BM_sprintf/8 85 ns 85 ns 8219398
BM_sprintf/9 87 ns 87 ns 8016940
BM_to_string/1 76 ns 76 ns 9159664
BM_to_string/2 79 ns 79 ns 8852605
BM_to_string/3 81 ns 81 ns 8612168
BM_to_string/4 83 ns 83 ns 8388007
BM_to_string/5 85 ns 85 ns 8289128
BM_to_string/6 86 ns 86 ns 8124345
BM_to_string/7 87 ns 87 ns 8049160
BM_to_string/8 89 ns 89 ns 7870350
BM_to_string/9 90 ns 90 ns 7744079
BM_stringstream/1 34 ns 34 ns 20586984
BM_stringstream/2 38 ns 38 ns 18778128
BM_stringstream/3 39 ns 39 ns 17165452
BM_stringstream/4 43 ns 43 ns 16696859
BM_stringstream/5 45 ns 45 ns 16127302
BM_stringstream/6 47 ns 47 ns 15600041
BM_stringstream/7 51 ns 51 ns 10000000
BM_stringstream/8 51 ns 51 ns 13379508
BM_stringstream/9 55 ns 55 ns 12981355
BM_to_chars_naive/1 12 ns 12 ns 58830826
BM_to_chars_naive/2 14 ns 14 ns 51283290
BM_to_chars_naive/3 15 ns 15 ns 47083964
BM_to_chars_naive/4 16 ns 16 ns 43907170
BM_to_chars_naive/5 17 ns 17 ns 41087032
BM_to_chars_naive/6 18 ns 18 ns 38062908
BM_to_chars_naive/7 19 ns 19 ns 36324383
BM_to_chars_naive/8 21 ns 21 ns 33114607
BM_to_chars_naive/9 22 ns 22 ns 31397235
BM_to_chars/1 9 ns 9 ns 77857609
BM_to_chars/2 10 ns 10 ns 71753282
BM_to_chars/3 11 ns 11 ns 54759461
BM_to_chars/4 12 ns 12 ns 56404502
BM_to_chars/5 14 ns 14 ns 50743796
BM_to_chars/6 15 ns 15 ns 47294406
BM_to_chars/7 16 ns 16 ns 43201370
BM_to_chars/8 18 ns 18 ns 39207877
BM_to_chars/9 20 ns 20 ns 35792902
BM_atoi/1 14 ns 14 ns 48904147
BM_atoi/2 16 ns 16 ns 42837308
BM_atoi/3 18 ns 18 ns 39150309
BM_atoi/4 20 ns 20 ns 35951644
BM_atoi/5 21 ns 21 ns 33153980
BM_atoi/6 23 ns 23 ns 30722978
BM_atoi/7 24 ns 24 ns 28734136
BM_atoi/8 26 ns 26 ns 26651732
BM_atoi/9 28 ns 28 ns 25124905
BM_strtol/1 14 ns 15 ns 48394136
BM_strtol/2 16 ns 16 ns 42688678
BM_strtol/3 18 ns 18 ns 39113890
BM_strtol/4 20 ns 20 ns 35940516
BM_strtol/5 21 ns 21 ns 33045007
BM_strtol/6 23 ns 23 ns 30704735
BM_strtol/7 24 ns 24 ns 28600808
BM_strtol/8 26 ns 26 ns 26730526
BM_strtol/9 28 ns 28 ns 25050583
BM_stoi/1 16 ns 16 ns 44890941
BM_stoi/2 17 ns 17 ns 40451418
BM_stoi/3 19 ns 19 ns 37593651
BM_stoi/4 20 ns 20 ns 34442293
BM_stoi/5 22 ns 22 ns 31927689
BM_stoi/6 24 ns 24 ns 29465662
BM_stoi/7 25 ns 25 ns 27752163
BM_stoi/8 27 ns 27 ns 25848348
BM_stoi/9 29 ns 29 ns 24381987
BM_from_chars_unchecked/1 4 ns 4 ns 162408633
BM_from_chars_unchecked/2 5 ns 5 ns 132550992
BM_from_chars_unchecked/3 6 ns 6 ns 113085260
BM_from_chars_unchecked/4 7 ns 7 ns 96808997
BM_from_chars_unchecked/5 8 ns 8 ns 89169648
BM_from_chars_unchecked/6 8 ns 8 ns 82540712
BM_from_chars_unchecked/7 9 ns 9 ns 77455690
BM_from_chars_unchecked/8 10 ns 10 ns 73136554
BM_from_chars_unchecked/9 10 ns 10 ns 68730597
BM_from_chars/1 9 ns 9 ns 78818376
BM_from_chars/2 10 ns 10 ns 71176282
BM_from_chars/3 11 ns 11 ns 63257070
BM_from_chars/4 12 ns 12 ns 56995175
BM_from_chars/5 14 ns 14 ns 50584861
BM_from_chars/6 15 ns 15 ns 47135520
BM_from_chars/7 16 ns 16 ns 43457090
BM_from_chars/8 17 ns 17 ns 40382499
BM_from_chars/9 19 ns 19 ns 37375537
This project was created by Erik Rigtorp <erik@rigtorp.se>.