-
Notifications
You must be signed in to change notification settings - Fork 36
/
utils.c
53 lines (49 loc) · 993 Bytes
/
utils.c
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
#include "utils.h"
int hex(char ch)
{
if ((ch >= 'a') && (ch <= 'f'))
return (ch - 'a' + 10);
if ((ch >= '0') && (ch <= '9'))
return (ch - '0');
if ((ch >= 'A') && (ch <= 'F'))
return (ch - 'A' + 10);
return (-1);
}
char *mem2hex(char *mem, char *buf, int count)
{
unsigned char ch;
for (int i = 0; i < count; i++)
{
ch = *(mem++);
*buf++ = hexchars[ch >> 4];
*buf++ = hexchars[ch % 16];
}
*buf = 0;
return (buf);
}
char *hex2mem(char *buf, char *mem, int count)
{
unsigned char ch;
for (int i = 0; i < count; i++)
{
ch = hex(*buf++) << 4;
ch = ch + hex(*buf++);
*(mem++) = ch;
}
return (mem);
}
int unescape(char *msg, int len)
{
char *w = msg, *r = msg;
while (r - msg < len)
{
char v = *r++;
if (v != '}')
{
*w++ = v;
continue;
}
*w++ = *r++ ^ 0x20;
}
return w - msg;
}