-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathShowBinBuf.cpp
77 lines (61 loc) · 1.1 KB
/
ShowBinBuf.cpp
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
67
68
69
70
71
72
73
74
75
76
77
void ShowBinHex(unsigned char* pBin, long len)
{
// Show 16 bytes each line.
long lLines = len / 16;
long lCharInLastLine = 0;
int j = 0;
long i = 0;
if(0 != len % 16)
{
lCharInLastLine = len - lLines * 16;
}
for(i = 0; i < lLines; ++i)
{
for(j = 0; j < 16; ++j)
{
printf("%02X ", pBin[16 * i + j]);
if(j == 7)
printf("- ");
}
printf(" ");
for(j = 0; j < 16; ++j)
{
if(isprint(pBin[16 * i + j]))
printf("%c", pBin[16 * i + j]);
else
printf(".");
}
printf("\n");
}
if(0 != lCharInLastLine)
{
for(j = 0; j < lCharInLastLine; ++j)
{
printf("%02X ", pBin[16 * i + j]);
if(j == 7 && lCharInLastLine > 8)
printf("- ");
}
int k = 0;
k += ((16 - lCharInLastLine) * 3);
if(lCharInLastLine <= 8)
{
k += 2;
}
for(int kk = 0; kk < k; ++kk)
printf(" ");
printf(" ");
for(j = 0; j < lCharInLastLine; ++j)
{
if(isprint(pBin[16 * i + j]))
printf("%c", pBin[16 * i + j]);
else
printf(".");
}
printf("\n");
}
printf("\n");
}
TEST:
unsigned char Inbuf[]="hello";
int len = strlen(inbuf);
ShowBinHex(Inbuf,len);