MongoDB C++ Driver legacy-1.1.2
Loading...
Searching...
No Matches
hex.h
1// util/hex.h
2
3/* Copyright 2009 10gen Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#pragma once
19
20#include <string>
21
22#include "mongo/base/string_data.h"
23#include "mongo/bson/util/builder.h"
24
25namespace mongo {
26// can't use hex namespace because it conflicts with hex iostream function
27inline int fromHex(char c) {
28 if ('0' <= c && c <= '9')
29 return c - '0';
30 if ('a' <= c && c <= 'f')
31 return c - 'a' + 10;
32 if ('A' <= c && c <= 'F')
33 return c - 'A' + 10;
34 verify(false);
35 return 0xff;
36}
37inline char fromHex(const char* c) {
38 return (char)((fromHex(c[0]) << 4) | fromHex(c[1]));
39}
40inline char fromHex(const StringData& c) {
41 return (char)((fromHex(c[0]) << 4) | fromHex(c[1]));
42}
43
44inline std::string toHex(const void* inRaw, int len) {
45 static const char hexchars[] = "0123456789ABCDEF";
46
47 StringBuilder out;
48 const char* in = reinterpret_cast<const char*>(inRaw);
49 for (int i = 0; i < len; ++i) {
50 char c = in[i];
51 char hi = hexchars[(c & 0xF0) >> 4];
52 char lo = hexchars[(c & 0x0F)];
53
54 out << hi << lo;
55 }
56
57 return out.str();
58}
59
60template <typename T>
61std::string integerToHex(T val);
62
63inline std::string toHexLower(const void* inRaw, int len) {
64 static const char hexchars[] = "0123456789abcdef";
65
66 StringBuilder out;
67 const char* in = reinterpret_cast<const char*>(inRaw);
68 for (int i = 0; i < len; ++i) {
69 char c = in[i];
70 char hi = hexchars[(c & 0xF0) >> 4];
71 char lo = hexchars[(c & 0x0F)];
72
73 out << hi << lo;
74 }
75
76 return out.str();
77}
78}
Utility functions for parsing numbers from strings.
Definition compare_numbers.h:20