-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathToHexString.cpp
More file actions
151 lines (123 loc) Β· 5.01 KB
/
ToHexString.cpp
File metadata and controls
151 lines (123 loc) Β· 5.01 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
// MLB Utility Library Module File
// ////////////////////////////////////////////////////////////////////////////
/*
File Name : %M%
File Version : %I%
Last Extracted : %D% %T%
Last Updated : %E% %U%
File Description : Logic to support formatting of binary data in
hexadecimal.
Revision History : 2008-11-14 --- Creation.
Michael L. Brock
Copyright Michael L. Brock 2008 - 2018.
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
// Required include files...
// ////////////////////////////////////////////////////////////////////////////
#include <Utility/ToHexString.hpp>
// ////////////////////////////////////////////////////////////////////////////
namespace MLB {
namespace Utility {
namespace {
// ////////////////////////////////////////////////////////////////////////////
const char HexChars[] = "0123456789abcdef";
// ////////////////////////////////////////////////////////////////////////////
} // Anonymous namespace
// ////////////////////////////////////////////////////////////////////////////
char *ToHexString(std::size_t data_length, const char *data_ptr,
char *out_ptr, int fill_char)
{
if (data_length) {
char *original_out_ptr = out_ptr;
while (data_length--) {
*out_ptr++ =
HexChars[(static_cast<unsigned char>(*data_ptr) & 0xf0) >> 4];
*out_ptr++ = HexChars[static_cast<unsigned char>(*data_ptr) & 0x0f];
if (data_length)
*out_ptr++ = static_cast<char>(fill_char);
++data_ptr;
}
*out_ptr = '\0';
return(original_out_ptr);
}
else
*out_ptr = '\0';
return(out_ptr);
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
std::string &ToHexString(std::size_t data_length, const char *data_ptr,
std::string &out_string, int fill_char)
{
// ... 'cause I can...
if (!data_length)
out_string.clear();
else {
out_string.resize((data_length * 2) + (data_length - 1));
ToHexString(data_length, data_ptr,
const_cast<char *>(out_string.c_str()), fill_char);
}
return(out_string);
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
std::string ToHexString(std::size_t data_length, const char *data_ptr,
int fill_char)
{
std::string out_string;
return(ToHexString(data_length, data_ptr, out_string, fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
char *ToHexString(std::size_t data_length, const void *data_ptr,
char *out_ptr, int fill_char)
{
return(ToHexString(data_length, static_cast<const char *>(data_ptr),
out_ptr, fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
std::string &ToHexString(std::size_t data_length, const void *data_ptr,
std::string &out_string, int fill_char)
{
return(ToHexString(data_length, static_cast<const char *>(data_ptr),
out_string, fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
std::string ToHexString(std::size_t data_length, const void *data_ptr,
int fill_char)
{
return(ToHexString(data_length, static_cast<const char *>(data_ptr),
fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
char *ToHexString(const std::string &in_string, char *out_ptr, int fill_char)
{
return(ToHexString(in_string.size(), in_string.data(), out_ptr, fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
std::string &ToHexString(const std::string &in_string, std::string &out_string,
int fill_char)
{
return(ToHexString(in_string.size(), in_string.data(), out_string,
fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
std::string ToHexString(const std::string &in_string, int fill_char)
{
return(ToHexString(in_string.size(), in_string.data(), fill_char));
}
// ////////////////////////////////////////////////////////////////////////////
} // namespace Utility
} // namespace MLB