Added hex parser
Added support for direct (not shortened) hex parsing
This commit is contained in:
parent
d13e86fc75
commit
76e0c6b31d
@ -76,14 +76,18 @@ namespace Tools {
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* toHexString(const void* data, ulong_64b size) {
|
char* toHexString(const void* data, ulong_64b size, bool ignorePreZero) {
|
||||||
char* c = (char*)data;
|
char* c = (char*)data;
|
||||||
|
|
||||||
ulong_64b lastNonZero = 0;
|
ulong_64b lastNonZero = ignorePreZero?0:size-1;
|
||||||
for (ulong_64b t = size; t > 0; --t) if (c[t - 1] != 0) {
|
if (ignorePreZero) {
|
||||||
lastNonZero = t - 1;
|
for (ulong_64b t = size; t > 0; --t)
|
||||||
goto Ayy;
|
if (c[t - 1] != 0) {
|
||||||
|
lastNonZero = t - 1;
|
||||||
|
goto Ayy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else goto Ayy;
|
||||||
return new char[2]{ '0', 0 };
|
return new char[2]{ '0', 0 };
|
||||||
|
|
||||||
Ayy:
|
Ayy:
|
||||||
@ -102,7 +106,24 @@ namespace Tools {
|
|||||||
return c1;
|
return c1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* toHexString(ulong_64b value) { return toHexString(&value, sizeof(value)); }
|
char* toHexString(const void* data, ulong_64b size) { return toHexString(data, size, true); }
|
||||||
|
|
||||||
|
char* toHexString(ulong_64b value) { return toHexString(&value, sizeof(value), false); }
|
||||||
|
|
||||||
|
void* parseHex(char* c, size_t *rSize) {
|
||||||
|
size_t len = strlen(c);
|
||||||
|
size_t rem = (len % 2);
|
||||||
|
size_t target = (len + rem) / 2;
|
||||||
|
if (rSize != nullptr) *rSize = target;
|
||||||
|
char* out = new char[target];
|
||||||
|
if (rem) out[target - 1] = c[0] - (c[0]>64 ? 55 : 48);
|
||||||
|
for (size_t t = rem; t < len; ++t) {
|
||||||
|
out[target - 1 - ((t + rem) / 2)] |= (c[t] - (c[t] > 64 ? 55 : 48)) << (((t + 1) % 2) * 4);
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ulong_64b parseHexLong(char* c) { return *(ulong_64b*)parseHex(c, nullptr); }
|
||||||
|
|
||||||
bool isDigit(char c) { return (c > 47) && (c < 58); }
|
bool isDigit(char c) { return (c > 47) && (c < 58); }
|
||||||
|
|
||||||
|
@ -20,8 +20,11 @@ namespace Tools {
|
|||||||
ulong_64b indexOf(char*, char);
|
ulong_64b indexOf(char*, char);
|
||||||
ulong_64b lastIndexOf(char*, char);
|
ulong_64b lastIndexOf(char*, char);
|
||||||
char* copydata(const char*, ulong_64b);
|
char* copydata(const char*, ulong_64b);
|
||||||
|
char* toHexString(const void* data, ulong_64b size, bool);
|
||||||
char* toHexString(const void* data, ulong_64b size);
|
char* toHexString(const void* data, ulong_64b size);
|
||||||
char* toHexString(ulong_64b);
|
char* toHexString(ulong_64b);
|
||||||
|
void* parseHex(char*, size_t *rSize);
|
||||||
|
ulong_64b parseHexLong(char*);
|
||||||
bool isDigit(char c);
|
bool isDigit(char c);
|
||||||
bool isNumber(char* c);
|
bool isNumber(char* c);
|
||||||
bool isIP(char* c);
|
bool isIP(char* c);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user