13 inline std::string
hexify(
unsigned char n)
19 res +=
"0123456789ABCDEF"[n % 16];
23 std::reverse(res.begin(), res.end());
35 std::transform(x.begin(), x.end(), x.begin(), tolower);
41 std::transform(x.begin(), x.end(), x.begin(), toupper);
53 std::string delimiter =
"x";
55 auto pos = str.find(delimiter);
56 str.erase(0, pos + delimiter.length());
61 ss >> std::hex >> value;
66 template <
typename T,
67 typename std::enable_if< std::is_arithmetic< T >::value >::
84 size_t last_char_idx = 0;
85 if (std::is_integral< T >::value)
87 if (std::is_same< T, unsigned long >::value)
91 result =
static_cast<T
>(std::stoul(str, &last_char_idx));
93 else if (std::is_same< T, unsigned long long >::value)
97 result =
static_cast<T
>(std::stoull(str, &last_char_idx));
99 else if (std::is_same< T, long >::value)
101 result =
static_cast<T
>(std::stol(str, &last_char_idx));
103 else if (std::is_same< T, long long >::value)
105 result =
static_cast<T
>(std::stoll(str, &last_char_idx));
107 else if (std::is_same< T, int >::value)
109 result =
static_cast<T
>(std::stoi(str, &last_char_idx));
111 else if (std::is_same< T, short >::value)
114 int check_value = std::stoi(str, &last_char_idx);
116 if (check_value > std::numeric_limits< short >::max()
117 || check_value < std::numeric_limits< short >::min())
118 throw std::out_of_range(
"short");
120 result =
static_cast<T
>(check_value);
122 else if (std::is_same< T, unsigned int >::value)
128 unsigned long check_value = std::stoul(str, &last_char_idx);
130 if (check_value > std::numeric_limits< unsigned int >::max())
131 throw std::out_of_range(
"unsigned int");
133 result =
static_cast<T
>(check_value);
135 else if (std::is_same< T, unsigned short >::value
136 || std::is_same< T, unsigned short >::value)
142 unsigned long check_value = std::stoul(str, &last_char_idx);
144 if (check_value > std::numeric_limits< unsigned short >::max())
145 throw std::out_of_range(
"unsigned short");
147 result =
static_cast<T
>(check_value);
154 else if (std::is_floating_point< T >::value)
156 if (std::is_same< T, float >::value)
158 result =
static_cast<T
>(std::stof(str, &last_char_idx));
159 if (!std::isfinite((
float)result))
162 else if (std::is_same< T, double >::value)
164 result =
static_cast<T
>(std::stod(str, &last_char_idx));
165 if (!std::isfinite((
double)result))
168 else if (std::is_same< T, long double >::value)
170 result =
static_cast<T
>(std::stold(str, &last_char_idx));
171 if (!std::isfinite((
long double)result))
183 catch (
const std::invalid_argument&)
187 catch (
const std::out_of_range&)
unsigned int ascii_hex_string_to_uint(std::string str)
Definition: string-utilities.h:51
std::string hexify(unsigned char n)
Definition: string-utilities.h:13
std::string to_upper(std::string x)
Definition: string-utilities.h:39
bool string_to_value(const std::string &str, T &result)
Definition: string-utilities.h:69
std::string to_lower(std::string x)
Definition: string-utilities.h:33
bool string_to_bool(const std::string &x)
Definition: string-utilities.h:45
Definition: stabilized-value.h:12