26const std::vector<std::string> HexUtil::mByteToHex = {
27 "00",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"0A",
"0B",
"0C",
"0D",
"0E",
"0F",
28 "10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"1A",
"1B",
"1C",
"1D",
"1E",
"1F",
29 "20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"2A",
"2B",
"2C",
"2D",
"2E",
"2F",
30 "30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"3A",
"3B",
"3C",
"3D",
"3E",
"3F",
31 "40",
"41",
"42",
"43",
"44",
"45",
"46",
"47",
"48",
"49",
"4A",
"4B",
"4C",
"4D",
"4E",
"4F",
32 "50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"5A",
"5B",
"5C",
"5D",
"5E",
"5F",
33 "60",
"61",
"62",
"63",
"64",
"65",
"66",
"67",
"68",
"69",
"6A",
"6B",
"6C",
"6D",
"6E",
"6F",
34 "70",
"71",
"72",
"73",
"74",
"75",
"76",
"77",
"78",
"79",
"7A",
"7B",
"7C",
"7D",
"7E",
"7F",
35 "80",
"81",
"82",
"83",
"84",
"85",
"86",
"87",
"88",
"89",
"8A",
"8B",
"8C",
"8D",
"8E",
"8F",
36 "90",
"91",
"92",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"9A",
"9B",
"9C",
"9D",
"9E",
"9F",
37 "A0",
"A1",
"A2",
"A3",
"A4",
"A5",
"A6",
"A7",
"A8",
"A9",
"AA",
"AB",
"AC",
"AD",
"AE",
"AF",
38 "B0",
"B1",
"B2",
"B3",
"B4",
"B5",
"B6",
"B7",
"B8",
"B9",
"BA",
"BB",
"BC",
"BD",
"BE",
"BF",
39 "C0",
"C1",
"C2",
"C3",
"C4",
"C5",
"C6",
"C7",
"C8",
"C9",
"CA",
"CB",
"CC",
"CD",
"CE",
"CF",
40 "D0",
"D1",
"D2",
"D3",
"D4",
"D5",
"D6",
"D7",
"D8",
"D9",
"DA",
"DB",
"DC",
"DD",
"DE",
"DF",
41 "E0",
"E1",
"E2",
"E3",
"E4",
"E5",
"E6",
"E7",
"E8",
"E9",
"EA",
"EB",
"EC",
"ED",
"EE",
"EF",
42 "F0",
"F1",
"F2",
"F3",
"F4",
"F5",
"F6",
"F7",
"F8",
"F9",
"FA",
"FB",
"FC",
"FD",
"FE",
"FF"
45const std::vector<uint8_t> HexUtil::mHexToNibble = {
46 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
47 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
48 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
49 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
50 0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
51 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
52 0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
53 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
54 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
55 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
56 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
57 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
58 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
59 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
60 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
61 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
68 if (hex.length() == 0 || hex.length() % 2 != 0) {
72 for (
int i = 0; i < static_cast<int>(hex.size()); i++) {
73 if (mHexToNibble[hex.at(i)] == 0xFF) {
83 std::vector<uint8_t> tab(hex.size() / 2);
85 if (hex.length() % 2) {
89 for (
int i = 0; i < static_cast<int>(hex.length()); i += 2) {
90 tab[i / 2] = ((mHexToNibble[hex.at(i)] << 4) +
91 (mHexToNibble[hex.at(i + 1)] & 0xFF));
101 for (
int i = 0; i < static_cast<int>(hex.length()); i++) {
103 val |= (mHexToNibble[hex.at(i)] & 0xFF);
113 for (
int i = 0; i < static_cast<int>(hex.length()); i++) {
115 val |= (mHexToNibble[hex.at(i)] & 0xFF);
125 for (
int i = 0; i < static_cast<int>(hex.length()); i++) {
127 val |= (mHexToNibble[hex.at(i)] & 0xFF);
137 for (
int i = 0; i < static_cast<int>(hex.length()); i++) {
139 val |= (mHexToNibble[hex.at(i)] & 0xFF);
147 std::stringstream ss;
149 for (
const auto& b : tab) {
150 ss << (mByteToHex[b & 0xFF]);
158 return mByteToHex[val & 0xFF];
163 if ((val & 0xFF00) == 0) {
164 return mByteToHex[val & 0xFF];
167 return mByteToHex[val >> 8 & 0xFF] + mByteToHex[val & 0xFF];
172 if ((val & 0xFFFFFF00) == 0) {
173 return mByteToHex[val & 0xFF];
174 }
else if ((val & 0xFFFF0000) == 0) {
175 return mByteToHex[val >> 8 & 0xFF] +
176 mByteToHex[val & 0xFF];
177 }
else if ((val & 0xFF000000) == 0) {
178 return mByteToHex[val >> 16 & 0xFF] +
179 mByteToHex[val >> 8 & 0xFF] +
180 mByteToHex[val & 0xFF];
183 return mByteToHex[val >> 24 & 0xFF] +
184 mByteToHex[val >> 16 & 0xFF] +
185 mByteToHex[val >> 8 & 0xFF] +
186 mByteToHex[val & 0xFF];
191 if ((val & 0xFFFFFFFFFFFFFF00L) == 0) {
192 return mByteToHex[(int) (val & 0xFF)];
193 }
else if ((val & 0xFFFFFFFFFFFF0000L) == 0) {
194 return mByteToHex[(int) (val >> 8 & 0xFF)] +
195 mByteToHex[(int) (val & 0xFF)];
196 }
else if ((val & 0xFFFFFFFFFF000000L) == 0) {
197 return mByteToHex[(int) (val >> 16 & 0xFF)] +
198 mByteToHex[(int) (val >> 8 & 0xFF)] +
199 mByteToHex[(int) (val & 0xFF)];
200 }
else if ((val & 0xFFFFFFFF00000000L) == 0) {
201 return mByteToHex[(int) (val >> 24 & 0xFF)] +
202 mByteToHex[(int) (val >> 16 & 0xFF)] +
203 mByteToHex[(int) (val >> 8 & 0xFF)] +
204 mByteToHex[(int) (val & 0xFF)];
205 }
else if ((val & 0xFFFFFF0000000000L) == 0) {
206 return mByteToHex[(int) (val >> 32 & 0xFF)] +
207 mByteToHex[(int) (val >> 24 & 0xFF)] +
208 mByteToHex[(int) (val >> 16 & 0xFF)] +
209 mByteToHex[(int) (val >> 8 & 0xFF)] +
210 mByteToHex[(int) (val & 0xFF)];
211 }
else if ((val & 0xFFFF000000000000L) == 0) {
212 return mByteToHex[(int) (val >> 40 & 0xFF)] +
213 mByteToHex[(int) (val >> 32 & 0xFF)] +
214 mByteToHex[(int) (val >> 24 & 0xFF)] +
215 mByteToHex[(int) (val >> 16 & 0xFF)] +
216 mByteToHex[(int) (val >> 8 & 0xFF)] +
217 mByteToHex[(int) (val & 0xFF)];
218 }
else if ((val & 0xFF00000000000000L) == 0) {
219 return mByteToHex[(int) (val >> 48 & 0xFF)] +
220 mByteToHex[(int) (val >> 40 & 0xFF)] +
221 mByteToHex[(int) (val >> 32 & 0xFF)] +
222 mByteToHex[(int) (val >> 24 & 0xFF)] +
223 mByteToHex[(int) (val >> 16 & 0xFF)] +
224 mByteToHex[(int) (val >> 8 & 0xFF)] +
225 mByteToHex[(int) (val & 0xFF)];
228 return mByteToHex[(int) (val >> 56 & 0xFF)] +
229 mByteToHex[(int) (val >> 48 & 0xFF)] +
230 mByteToHex[(int) (val >> 40 & 0xFF)] +
231 mByteToHex[(int) (val >> 32 & 0xFF)] +
232 mByteToHex[(int) (val >> 24 & 0xFF)] +
233 mByteToHex[(int) (val >> 16 & 0xFF)] +
234 mByteToHex[(int) (val >> 8 & 0xFF)] +
235 mByteToHex[(int) (val & 0xFF)];
static uint32_t toInt(const std::string &hex)
static uint64_t toLong(const std::string &hex)
static const std::vector< uint8_t > toByteArray(const std::string &hex)
static const std::string toHex(const std::vector< uint8_t > &tab)
static bool isValid(const std::string &hex)
static uint8_t toByte(const std::string &hex)
static uint16_t toShort(const std::string &hex)