diff options
| author | erikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-27 16:11:15 +0000 | 
|---|---|---|
| committer | erikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-27 16:11:15 +0000 | 
| commit | 5d0c17fe26c9ecc7887ae976f6ee1ca7a73642da (patch) | |
| tree | da57a5847f6d6ca51766969160ec4215308008c9 /base/string_util.cc | |
| parent | d39d60d7205f47ae4e9bb4a6bf0081e54fe2a2e0 (diff) | |
| download | chromium_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.cc | 38 | 
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); | 
