forked from eXtremal-ik7/ngxrest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
strExtras.h
66 lines (52 loc) · 1.1 KB
/
strExtras.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef __LIBP2P_STREXTRAS_H_
#define __LIBP2P_STREXTRAS_H_
#include <algorithm>
#include "config.h"
template<typename IntType> IntType xhton(IntType X)
{
if (!is_bigendian()) {
IntType lX = X;
IntType result = 0;
for (size_t i = 0; i < sizeof(IntType); i++) {
result |= (lX & 0xFF) << (8 * (sizeof(IntType) - i - 1));
lX >>= 8;
}
return result;
} else {
return X;
}
}
template<typename IntType> IntType xntoh(IntType X)
{
return xhton(X);
}
template<typename Type> size_t xitoa(Type value, char *out)
{
Type lvalue = value;
char *lout = out;
char *pout = out, *pOutEnd;
if (lvalue < 0) {
lvalue = -lvalue;
*pout++ = '-';
lout++;
}
do {
*pout++ = '0' + lvalue % 10;
lvalue /= 10;
} while (lvalue);
pOutEnd = pout;
*pOutEnd = 0;
pout--;
while (lout < pout)
std::swap(*lout++, *pout--);
return pOutEnd - out;
}
template<typename Type> Type xatoi(const char *in)
{
Type lvalue = 0;
const char *p = in;
while (*p)
lvalue = (lvalue*10) + (*p++ - '0');
return lvalue;
}
#endif //__LIBP2P_STREXTRAS_H_