7#include "absl/strings/str_cat.h"
8#include "absl/strings/str_format.h"
9#include "absl/strings/string_view.h"
19 hex = absl::StrCat(
"$", hex);
22 hex = absl::StrCat(
"#", hex);
25 hex = absl::StrCat(
"0x", hex);
36 result = absl::StrFormat(
"%02X",
byte);
38 result = absl::StrFormat(
"%02x",
byte);
40 HandleHexStringParams(result, params);
47 result = absl::StrFormat(
"%04X", word);
49 result = absl::StrFormat(
"%04x", word);
51 HandleHexStringParams(result, params);
58 result = absl::StrFormat(
"%06X", dword);
60 result = absl::StrFormat(
"%06x", dword);
62 HandleHexStringParams(result, params);
69 result = absl::StrFormat(
"%08X", qword);
71 result = absl::StrFormat(
"%08x", qword);
73 HandleHexStringParams(result, params);
82bool ParseHexDigits(absl::string_view str, uint64_t max_value, uint64_t* out) {
85 while (!str.empty() &&
86 std::isspace(
static_cast<unsigned char>(str.front()))) {
89 while (!str.empty() && std::isspace(
static_cast<unsigned char>(str.back()))) {
96 if (str.front() ==
'$') {
98 }
else if (str.size() >= 2 && str[0] ==
'0' &&
99 (str[1] ==
'x' || str[1] ==
'X')) {
100 str.remove_prefix(2);
107 for (
const char c : str) {
108 const auto byte =
static_cast<unsigned char>(c);
109 if (!std::isxdigit(
byte)) {
113 if (
byte >=
'0' &&
byte <=
'9') {
115 }
else if (
byte >=
'a' &&
byte <=
'f') {
116 digit =
byte -
'a' + 10;
118 digit =
byte -
'A' + 10;
121 if (value > (max_value -
static_cast<uint64_t
>(digit)) / 16) {
124 value = value * 16 +
static_cast<uint64_t
>(digit);
135 if (!ParseHexDigits(str, std::numeric_limits<uint64_t>::max(), &value)) {
144 if (!ParseHexDigits(str, std::numeric_limits<uint32_t>::max(), &value)) {
147 *out =
static_cast<uint32_t
>(value);
153 if (!ParseHexDigits(str,
154 static_cast<uint64_t
>(std::numeric_limits<int>::max()),
158 *out =
static_cast<int>(value);
bool ParseHexDigits(absl::string_view str, uint64_t max_value, uint64_t *out)
void HandleHexStringParams(std::string &hex, const HexStringParams ¶ms)
std::string HexWord(uint16_t word, HexStringParams params)
std::string HexByte(uint8_t byte, HexStringParams params)
std::string HexLongLong(uint64_t qword, HexStringParams params)
bool ParseHexString(absl::string_view str, uint64_t *out)
std::string HexLong(uint32_t dword, HexStringParams params)
enum yaze::util::HexStringParams::Prefix prefix