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