1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_number_conversions.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <iterator>
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/logging.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_number_conversions_internal.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h"
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker
NumberToString(int value)17*6777b538SAndroid Build Coastguard Worker std::string NumberToString(int value) {
18*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::string>(value);
19*6777b538SAndroid Build Coastguard Worker }
20*6777b538SAndroid Build Coastguard Worker
NumberToString16(int value)21*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(int value) {
22*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::u16string>(value);
23*6777b538SAndroid Build Coastguard Worker }
24*6777b538SAndroid Build Coastguard Worker
NumberToString(unsigned value)25*6777b538SAndroid Build Coastguard Worker std::string NumberToString(unsigned value) {
26*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::string>(value);
27*6777b538SAndroid Build Coastguard Worker }
28*6777b538SAndroid Build Coastguard Worker
NumberToString16(unsigned value)29*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(unsigned value) {
30*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::u16string>(value);
31*6777b538SAndroid Build Coastguard Worker }
32*6777b538SAndroid Build Coastguard Worker
NumberToString(long value)33*6777b538SAndroid Build Coastguard Worker std::string NumberToString(long value) {
34*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::string>(value);
35*6777b538SAndroid Build Coastguard Worker }
36*6777b538SAndroid Build Coastguard Worker
NumberToString16(long value)37*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(long value) {
38*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::u16string>(value);
39*6777b538SAndroid Build Coastguard Worker }
40*6777b538SAndroid Build Coastguard Worker
NumberToString(unsigned long value)41*6777b538SAndroid Build Coastguard Worker std::string NumberToString(unsigned long value) {
42*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::string>(value);
43*6777b538SAndroid Build Coastguard Worker }
44*6777b538SAndroid Build Coastguard Worker
NumberToString16(unsigned long value)45*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(unsigned long value) {
46*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::u16string>(value);
47*6777b538SAndroid Build Coastguard Worker }
48*6777b538SAndroid Build Coastguard Worker
NumberToString(long long value)49*6777b538SAndroid Build Coastguard Worker std::string NumberToString(long long value) {
50*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::string>(value);
51*6777b538SAndroid Build Coastguard Worker }
52*6777b538SAndroid Build Coastguard Worker
NumberToString16(long long value)53*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(long long value) {
54*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::u16string>(value);
55*6777b538SAndroid Build Coastguard Worker }
56*6777b538SAndroid Build Coastguard Worker
NumberToString(unsigned long long value)57*6777b538SAndroid Build Coastguard Worker std::string NumberToString(unsigned long long value) {
58*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::string>(value);
59*6777b538SAndroid Build Coastguard Worker }
60*6777b538SAndroid Build Coastguard Worker
NumberToString16(unsigned long long value)61*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(unsigned long long value) {
62*6777b538SAndroid Build Coastguard Worker return internal::IntToStringT<std::u16string>(value);
63*6777b538SAndroid Build Coastguard Worker }
64*6777b538SAndroid Build Coastguard Worker
NumberToString(double value)65*6777b538SAndroid Build Coastguard Worker std::string NumberToString(double value) {
66*6777b538SAndroid Build Coastguard Worker return internal::DoubleToStringT<std::string>(value);
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker
NumberToString16(double value)69*6777b538SAndroid Build Coastguard Worker std::u16string NumberToString16(double value) {
70*6777b538SAndroid Build Coastguard Worker return internal::DoubleToStringT<std::u16string>(value);
71*6777b538SAndroid Build Coastguard Worker }
72*6777b538SAndroid Build Coastguard Worker
StringToInt(StringPiece input,int * output)73*6777b538SAndroid Build Coastguard Worker bool StringToInt(StringPiece input, int* output) {
74*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
75*6777b538SAndroid Build Coastguard Worker }
76*6777b538SAndroid Build Coastguard Worker
StringToInt(StringPiece16 input,int * output)77*6777b538SAndroid Build Coastguard Worker bool StringToInt(StringPiece16 input, int* output) {
78*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
79*6777b538SAndroid Build Coastguard Worker }
80*6777b538SAndroid Build Coastguard Worker
StringToUint(StringPiece input,unsigned * output)81*6777b538SAndroid Build Coastguard Worker bool StringToUint(StringPiece input, unsigned* output) {
82*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
83*6777b538SAndroid Build Coastguard Worker }
84*6777b538SAndroid Build Coastguard Worker
StringToUint(StringPiece16 input,unsigned * output)85*6777b538SAndroid Build Coastguard Worker bool StringToUint(StringPiece16 input, unsigned* output) {
86*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
87*6777b538SAndroid Build Coastguard Worker }
88*6777b538SAndroid Build Coastguard Worker
StringToInt64(StringPiece input,int64_t * output)89*6777b538SAndroid Build Coastguard Worker bool StringToInt64(StringPiece input, int64_t* output) {
90*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
91*6777b538SAndroid Build Coastguard Worker }
92*6777b538SAndroid Build Coastguard Worker
StringToInt64(StringPiece16 input,int64_t * output)93*6777b538SAndroid Build Coastguard Worker bool StringToInt64(StringPiece16 input, int64_t* output) {
94*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
95*6777b538SAndroid Build Coastguard Worker }
96*6777b538SAndroid Build Coastguard Worker
StringToUint64(StringPiece input,uint64_t * output)97*6777b538SAndroid Build Coastguard Worker bool StringToUint64(StringPiece input, uint64_t* output) {
98*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
99*6777b538SAndroid Build Coastguard Worker }
100*6777b538SAndroid Build Coastguard Worker
StringToUint64(StringPiece16 input,uint64_t * output)101*6777b538SAndroid Build Coastguard Worker bool StringToUint64(StringPiece16 input, uint64_t* output) {
102*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
103*6777b538SAndroid Build Coastguard Worker }
104*6777b538SAndroid Build Coastguard Worker
StringToSizeT(StringPiece input,size_t * output)105*6777b538SAndroid Build Coastguard Worker bool StringToSizeT(StringPiece input, size_t* output) {
106*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
107*6777b538SAndroid Build Coastguard Worker }
108*6777b538SAndroid Build Coastguard Worker
StringToSizeT(StringPiece16 input,size_t * output)109*6777b538SAndroid Build Coastguard Worker bool StringToSizeT(StringPiece16 input, size_t* output) {
110*6777b538SAndroid Build Coastguard Worker return internal::StringToIntImpl(input, *output);
111*6777b538SAndroid Build Coastguard Worker }
112*6777b538SAndroid Build Coastguard Worker
StringToDouble(StringPiece input,double * output)113*6777b538SAndroid Build Coastguard Worker bool StringToDouble(StringPiece input, double* output) {
114*6777b538SAndroid Build Coastguard Worker return internal::StringToDoubleImpl(input, input.data(), *output);
115*6777b538SAndroid Build Coastguard Worker }
116*6777b538SAndroid Build Coastguard Worker
StringToDouble(StringPiece16 input,double * output)117*6777b538SAndroid Build Coastguard Worker bool StringToDouble(StringPiece16 input, double* output) {
118*6777b538SAndroid Build Coastguard Worker return internal::StringToDoubleImpl(
119*6777b538SAndroid Build Coastguard Worker input, reinterpret_cast<const uint16_t*>(input.data()), *output);
120*6777b538SAndroid Build Coastguard Worker }
121*6777b538SAndroid Build Coastguard Worker
HexEncode(const void * bytes,size_t size)122*6777b538SAndroid Build Coastguard Worker std::string HexEncode(const void* bytes, size_t size) {
123*6777b538SAndroid Build Coastguard Worker return HexEncode(span(static_cast<const uint8_t*>(bytes), size));
124*6777b538SAndroid Build Coastguard Worker }
125*6777b538SAndroid Build Coastguard Worker
HexEncode(span<const uint8_t> bytes)126*6777b538SAndroid Build Coastguard Worker std::string HexEncode(span<const uint8_t> bytes) {
127*6777b538SAndroid Build Coastguard Worker // Each input byte creates two output hex characters.
128*6777b538SAndroid Build Coastguard Worker std::string ret;
129*6777b538SAndroid Build Coastguard Worker ret.reserve(bytes.size() * 2);
130*6777b538SAndroid Build Coastguard Worker
131*6777b538SAndroid Build Coastguard Worker for (uint8_t byte : bytes) {
132*6777b538SAndroid Build Coastguard Worker AppendHexEncodedByte(byte, ret);
133*6777b538SAndroid Build Coastguard Worker }
134*6777b538SAndroid Build Coastguard Worker return ret;
135*6777b538SAndroid Build Coastguard Worker }
136*6777b538SAndroid Build Coastguard Worker
HexEncode(StringPiece chars)137*6777b538SAndroid Build Coastguard Worker std::string HexEncode(StringPiece chars) {
138*6777b538SAndroid Build Coastguard Worker return HexEncode(base::as_byte_span(chars));
139*6777b538SAndroid Build Coastguard Worker }
140*6777b538SAndroid Build Coastguard Worker
HexStringToInt(StringPiece input,int * output)141*6777b538SAndroid Build Coastguard Worker bool HexStringToInt(StringPiece input, int* output) {
142*6777b538SAndroid Build Coastguard Worker return internal::HexStringToIntImpl(input, *output);
143*6777b538SAndroid Build Coastguard Worker }
144*6777b538SAndroid Build Coastguard Worker
HexStringToUInt(StringPiece input,uint32_t * output)145*6777b538SAndroid Build Coastguard Worker bool HexStringToUInt(StringPiece input, uint32_t* output) {
146*6777b538SAndroid Build Coastguard Worker return internal::HexStringToIntImpl(input, *output);
147*6777b538SAndroid Build Coastguard Worker }
148*6777b538SAndroid Build Coastguard Worker
HexStringToInt64(StringPiece input,int64_t * output)149*6777b538SAndroid Build Coastguard Worker bool HexStringToInt64(StringPiece input, int64_t* output) {
150*6777b538SAndroid Build Coastguard Worker return internal::HexStringToIntImpl(input, *output);
151*6777b538SAndroid Build Coastguard Worker }
152*6777b538SAndroid Build Coastguard Worker
HexStringToUInt64(StringPiece input,uint64_t * output)153*6777b538SAndroid Build Coastguard Worker bool HexStringToUInt64(StringPiece input, uint64_t* output) {
154*6777b538SAndroid Build Coastguard Worker return internal::HexStringToIntImpl(input, *output);
155*6777b538SAndroid Build Coastguard Worker }
156*6777b538SAndroid Build Coastguard Worker
HexStringToBytes(StringPiece input,std::vector<uint8_t> * output)157*6777b538SAndroid Build Coastguard Worker bool HexStringToBytes(StringPiece input, std::vector<uint8_t>* output) {
158*6777b538SAndroid Build Coastguard Worker DCHECK(output->empty());
159*6777b538SAndroid Build Coastguard Worker return internal::HexStringToByteContainer<uint8_t>(
160*6777b538SAndroid Build Coastguard Worker input, std::back_inserter(*output));
161*6777b538SAndroid Build Coastguard Worker }
162*6777b538SAndroid Build Coastguard Worker
HexStringToString(StringPiece input,std::string * output)163*6777b538SAndroid Build Coastguard Worker bool HexStringToString(StringPiece input, std::string* output) {
164*6777b538SAndroid Build Coastguard Worker DCHECK(output->empty());
165*6777b538SAndroid Build Coastguard Worker return internal::HexStringToByteContainer<char>(input,
166*6777b538SAndroid Build Coastguard Worker std::back_inserter(*output));
167*6777b538SAndroid Build Coastguard Worker }
168*6777b538SAndroid Build Coastguard Worker
HexStringToSpan(StringPiece input,span<uint8_t> output)169*6777b538SAndroid Build Coastguard Worker bool HexStringToSpan(StringPiece input, span<uint8_t> output) {
170*6777b538SAndroid Build Coastguard Worker if (input.size() / 2 != output.size())
171*6777b538SAndroid Build Coastguard Worker return false;
172*6777b538SAndroid Build Coastguard Worker
173*6777b538SAndroid Build Coastguard Worker return internal::HexStringToByteContainer<uint8_t>(input, output.begin());
174*6777b538SAndroid Build Coastguard Worker }
175*6777b538SAndroid Build Coastguard Worker
176*6777b538SAndroid Build Coastguard Worker } // namespace base
177