summaryrefslogtreecommitdiffstats
path: root/base/string_util.cc
diff options
context:
space:
mode:
authorerikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-27 16:11:15 +0000
committererikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-27 16:11:15 +0000
commit5d0c17fe26c9ecc7887ae976f6ee1ca7a73642da (patch)
treeda57a5847f6d6ca51766969160ec4215308008c9 /base/string_util.cc
parentd39d60d7205f47ae4e9bb4a6bf0081e54fe2a2e0 (diff)
downloadchromium_src-5d0c17fe26c9ecc7887ae976f6ee1ca7a73642da.zip
chromium_src-5d0c17fe26c9ecc7887ae976f6ee1ca7a73642da.tar.gz
chromium_src-5d0c17fe26c9ecc7887ae976f6ee1ca7a73642da.tar.bz2
Add HexStringToBytes which takes an arbitrary length hex string and creates a vector of bytes.
Review URL: http://codereview.chromium.org/18814 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8716 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/string_util.cc')
-rw-r--r--base/string_util.cc38
1 files changed, 38 insertions, 0 deletions
diff --git a/base/string_util.cc b/base/string_util.cc
index 5a06b64..036e61d 100644
--- a/base/string_util.cc
+++ b/base/string_util.cc
@@ -1409,6 +1409,44 @@ bool HexStringToInt(const std::wstring& input, int* output) {
input, reinterpret_cast<long*>(output));
}
+template<class CHAR>
+bool HexDigitToIntT(const CHAR digit, uint8* val) {
+ if (digit >= '0' && digit <= '9')
+ *val = digit - '0';
+ else if (digit >= 'a' && digit <= 'f')
+ *val = 10 + digit - 'a';
+ else if (digit >= 'A' && digit <= 'F')
+ *val = 10 + digit - 'A';
+ else
+ return false;
+ return true;
+}
+
+template<typename STR>
+bool HexStringToBytesT(const STR& input, std::vector<uint8>* output) {
+ DCHECK(output->size() == 0);
+ int count = input.size();
+ if (count == 0 || (count % 2) != 0)
+ return false;
+ for (int i = 0; i < count / 2; ++i) {
+ uint8 msb = 0; // most significant 4 bits
+ uint8 lsb = 0; // least significant 4 bits
+ if (!HexDigitToIntT(input[i * 2], &msb) ||
+ !HexDigitToIntT(input[i * 2 + 1], &lsb))
+ return false;
+ output->push_back((msb << 4) | lsb);
+ }
+ return true;
+}
+
+bool HexStringToBytes(const std::string& input, std::vector<uint8>* output) {
+ return HexStringToBytesT(input, output);
+}
+
+bool HexStringToBytes(const std::wstring& input, std::vector<uint8>* output) {
+ return HexStringToBytesT(input, output);
+}
+
int StringToInt(const std::string& value) {
int result;
StringToInt(value, &result);