blob: cde0c650f9a899d00c3a7e3d216944137ddb5aef [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2012 The Chromium Authors
[email protected]528c56d2010-07-30 19:28:442// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]dfa049e2013-02-07 02:57:225#include "base/strings/string_number_conversions.h"
[email protected]528c56d2010-07-30 19:28:446
Jan Wilken Dörrie5048b932020-06-22 12:12:157#include <iterator>
8#include <string>
[email protected]528c56d2010-07-30 19:28:449
Jan Wilken Dörrie5048b932020-06-22 12:12:1510#include "base/containers/span.h"
11#include "base/logging.h"
Jan Wilken Dörrie5048b932020-06-22 12:12:1512#include "base/strings/string_number_conversions_internal.h"
13#include "base/strings/string_piece.h"
[email protected]528c56d2010-07-30 19:28:4414
15namespace base {
16
Daniel Cheng3d199b12017-12-12 03:51:0917std::string NumberToString(int value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1518 return internal::IntToStringT<std::string>(value);
[email protected]528c56d2010-07-30 19:28:4419}
20
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5721std::u16string NumberToString16(int value) {
22 return internal::IntToStringT<std::u16string>(value);
[email protected]528c56d2010-07-30 19:28:4423}
24
Daniel Cheng3d199b12017-12-12 03:51:0925std::string NumberToString(unsigned value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1526 return internal::IntToStringT<std::string>(value);
[email protected]528c56d2010-07-30 19:28:4427}
28
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5729std::u16string NumberToString16(unsigned value) {
30 return internal::IntToStringT<std::u16string>(value);
[email protected]528c56d2010-07-30 19:28:4431}
32
Daniel Cheng3d199b12017-12-12 03:51:0933std::string NumberToString(long value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1534 return internal::IntToStringT<std::string>(value);
[email protected]528c56d2010-07-30 19:28:4435}
36
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5737std::u16string NumberToString16(long value) {
38 return internal::IntToStringT<std::u16string>(value);
[email protected]528c56d2010-07-30 19:28:4439}
40
Daniel Cheng3d199b12017-12-12 03:51:0941std::string NumberToString(unsigned long value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1542 return internal::IntToStringT<std::string>(value);
[email protected]528c56d2010-07-30 19:28:4443}
44
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5745std::u16string NumberToString16(unsigned long value) {
46 return internal::IntToStringT<std::u16string>(value);
[email protected]1c0fb252014-06-27 19:10:3847}
48
Daniel Cheng3d199b12017-12-12 03:51:0949std::string NumberToString(long long value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1550 return internal::IntToStringT<std::string>(value);
[email protected]1c0fb252014-06-27 19:10:3851}
52
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5753std::u16string NumberToString16(long long value) {
54 return internal::IntToStringT<std::u16string>(value);
[email protected]528c56d2010-07-30 19:28:4455}
Daniel Cheng3d199b12017-12-12 03:51:0956
57std::string NumberToString(unsigned long long value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1558 return internal::IntToStringT<std::string>(value);
Daniel Cheng3d199b12017-12-12 03:51:0959}
60
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5761std::u16string NumberToString16(unsigned long long value) {
62 return internal::IntToStringT<std::u16string>(value);
Robert Sesek75b27372019-08-29 14:03:1863}
64
Brett Wilson88ed598e52017-11-17 01:39:0165std::string NumberToString(double value) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1566 return internal::DoubleToStringT<std::string>(value);
[email protected]528c56d2010-07-30 19:28:4467}
68
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5769std::u16string NumberToString16(double value) {
70 return internal::DoubleToStringT<std::u16string>(value);
Brett Wilson88ed598e52017-11-17 01:39:0171}
72
Reilly Grant39aecc32018-01-04 00:52:5273bool StringToInt(StringPiece input, int* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1574 return internal::StringToIntImpl(input, *output);
[email protected]cfcf2da2010-10-21 14:05:3875}
76
Reilly Grant39aecc32018-01-04 00:52:5277bool StringToInt(StringPiece16 input, int* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1578 return internal::StringToIntImpl(input, *output);
[email protected]cfcf2da2010-10-21 14:05:3879}
80
Reilly Grant39aecc32018-01-04 00:52:5281bool StringToUint(StringPiece input, unsigned* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1582 return internal::StringToIntImpl(input, *output);
[email protected]d1bafad2012-01-28 01:02:1783}
84
Reilly Grant39aecc32018-01-04 00:52:5285bool StringToUint(StringPiece16 input, unsigned* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1586 return internal::StringToIntImpl(input, *output);
[email protected]d1bafad2012-01-28 01:02:1787}
88
Reilly Grant39aecc32018-01-04 00:52:5289bool StringToInt64(StringPiece input, int64_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1590 return internal::StringToIntImpl(input, *output);
[email protected]cfcf2da2010-10-21 14:05:3891}
92
Reilly Grant39aecc32018-01-04 00:52:5293bool StringToInt64(StringPiece16 input, int64_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1594 return internal::StringToIntImpl(input, *output);
[email protected]cfcf2da2010-10-21 14:05:3895}
96
Reilly Grant39aecc32018-01-04 00:52:5297bool StringToUint64(StringPiece input, uint64_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:1598 return internal::StringToIntImpl(input, *output);
[email protected]d2d0b6b2012-01-26 00:27:2999}
100
Reilly Grant39aecc32018-01-04 00:52:52101bool StringToUint64(StringPiece16 input, uint64_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15102 return internal::StringToIntImpl(input, *output);
[email protected]d2d0b6b2012-01-26 00:27:29103}
104
Reilly Grant39aecc32018-01-04 00:52:52105bool StringToSizeT(StringPiece input, size_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15106 return internal::StringToIntImpl(input, *output);
[email protected]4420d93272012-01-28 03:30:17107}
108
Reilly Grant39aecc32018-01-04 00:52:52109bool StringToSizeT(StringPiece16 input, size_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15110 return internal::StringToIntImpl(input, *output);
[email protected]528c56d2010-07-30 19:28:44111}
112
Peter Kasting40eaeabd2019-09-10 16:58:13113bool StringToDouble(StringPiece input, double* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15114 return internal::StringToDoubleImpl(input, input.data(), *output);
Peter Kasting40eaeabd2019-09-10 16:58:13115}
[email protected]528c56d2010-07-30 19:28:44116
Peter Kasting40eaeabd2019-09-10 16:58:13117bool StringToDouble(StringPiece16 input, double* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15118 return internal::StringToDoubleImpl(
119 input, reinterpret_cast<const uint16_t*>(input.data()), *output);
Peter Kasting40eaeabd2019-09-10 16:58:13120}
[email protected]cfcf2da2010-10-21 14:05:38121
[email protected]528c56d2010-07-30 19:28:44122std::string HexEncode(const void* bytes, size_t size) {
123 static const char kHexChars[] = "0123456789ABCDEF";
124
125 // Each input byte creates two output hex characters.
126 std::string ret(size * 2, '\0');
127
128 for (size_t i = 0; i < size; ++i) {
129 char b = reinterpret_cast<const char*>(bytes)[i];
130 ret[(i * 2)] = kHexChars[(b >> 4) & 0xf];
131 ret[(i * 2) + 1] = kHexChars[b & 0xf];
132 }
133 return ret;
134}
135
Adam Langley6d144b72019-08-01 00:29:22136std::string HexEncode(base::span<const uint8_t> bytes) {
137 return HexEncode(bytes.data(), bytes.size());
138}
139
Reilly Grant39aecc32018-01-04 00:52:52140bool HexStringToInt(StringPiece input, int* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15141 return internal::HexStringToIntImpl(input, *output);
[email protected]cfcf2da2010-10-21 14:05:38142}
143
Reilly Grant39aecc32018-01-04 00:52:52144bool HexStringToUInt(StringPiece input, uint32_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15145 return internal::HexStringToIntImpl(input, *output);
[email protected]3fb01692013-10-23 13:37:04146}
147
Reilly Grant39aecc32018-01-04 00:52:52148bool HexStringToInt64(StringPiece input, int64_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15149 return internal::HexStringToIntImpl(input, *output);
[email protected]ce63d6b2012-12-20 02:46:28150}
151
Reilly Grant39aecc32018-01-04 00:52:52152bool HexStringToUInt64(StringPiece input, uint64_t* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15153 return internal::HexStringToIntImpl(input, *output);
[email protected]528c56d2010-07-30 19:28:44154}
155
Eric Romanf1730e02019-11-04 21:33:50156bool HexStringToBytes(StringPiece input, std::vector<uint8_t>* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15157 DCHECK(output->empty());
Peter Kasting5565d8672022-05-31 18:19:10158 return internal::HexStringToByteContainer<uint8_t>(
159 input, std::back_inserter(*output));
Eric Romanf1730e02019-11-04 21:33:50160}
161
162bool HexStringToString(StringPiece input, std::string* output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15163 DCHECK(output->empty());
Peter Kasting5565d8672022-05-31 18:19:10164 return internal::HexStringToByteContainer<char>(input,
165 std::back_inserter(*output));
Eric Romanf1730e02019-11-04 21:33:50166}
167
168bool HexStringToSpan(StringPiece input, base::span<uint8_t> output) {
Jan Wilken Dörrie5048b932020-06-22 12:12:15169 if (input.size() / 2 != output.size())
Eric Romanf1730e02019-11-04 21:33:50170 return false;
171
Peter Kasting5565d8672022-05-31 18:19:10172 return internal::HexStringToByteContainer<uint8_t>(input, output.begin());
Eric Romanf1730e02019-11-04 21:33:50173}
174
[email protected]528c56d2010-07-30 19:28:44175} // namespace base