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