Add hex utility functions and refactor usage in editors
This commit is contained in:
86
src/util/hex.cc
Normal file
86
src/util/hex.cc
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "hex.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "absl/strings/str_cat"
|
||||
#include "absl/strings/str_format.h"
|
||||
#include "absl/strings/str_join.h"
|
||||
|
||||
namespace yaze {
|
||||
namespace util {
|
||||
|
||||
namespace {
|
||||
|
||||
void HandleHexStringParams(const std::string &hex,
|
||||
const HexStringParams ¶ms) {
|
||||
std::string result = hex;
|
||||
switch (params.prefix) {
|
||||
case HexStringParams::Prefix::kDollar:
|
||||
result = absl::StrCat("$", result);
|
||||
break;
|
||||
case HexStringParams::Prefix::kHash:
|
||||
result = absl::StrCat("#", result);
|
||||
break;
|
||||
case HexStringParams::Prefix::k0x:
|
||||
result = absl::StrCat("0x", result);
|
||||
case HexStringParams::Prefix::kNone:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
std::string HexByte(uint8_t byte, HexStringParams params) {
|
||||
std::string result;
|
||||
const static std::string kLowerFormat = "%02x";
|
||||
const static std::string kUpperFormat = "%02X";
|
||||
if (params.uppercase) {
|
||||
result = absl::StrFormat(kUpperFormat.c_str(), byte);
|
||||
} else {
|
||||
result = absl::StrFormat(kLowerFormat.c_str(), byte);
|
||||
}
|
||||
HandleHexStringParams(result, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string HexWord(uint16_t word, HexStringParams params) {
|
||||
std::string result;
|
||||
const static std::string kLowerFormat = "%04x";
|
||||
const static std::string kUpperFormat = "%04X";
|
||||
if (params.uppercase) {
|
||||
result = absl::StrFormat(kUpperFormat.c_str(), word);
|
||||
} else {
|
||||
result = absl::StrFormat(kLowerFormat.c_str(), word);
|
||||
}
|
||||
HandleHexStringParams(result, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string HexLong(uint32_t dword, HexStringParams params) {
|
||||
std::string result;
|
||||
const static std::string kLowerFormat = "%06x";
|
||||
const static std::string kUpperFormat = "%06X";
|
||||
if (params.uppercase) {
|
||||
result = absl::StrFormat(kUpperFormat.c_str(), dword);
|
||||
} else {
|
||||
result = absl::StrFormat(kLowerFormat.c_str(), dword);
|
||||
}
|
||||
HandleHexStringParams(result, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string HexLongLong(uint64_t qword, HexStringParams params) {
|
||||
std::string result;
|
||||
const static std::string kLowerFormat = "%08x";
|
||||
const static std::string kUpperFormat = "%08X";
|
||||
if (params.uppercase) {
|
||||
result = absl::StrFormat(kUpperFormat.c_str(), qword);
|
||||
} else {
|
||||
result = absl::StrFormat(kLowerFormat.c_str(), qword);
|
||||
}
|
||||
HandleHexStringParams(result, params);
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace util
|
||||
} // namespace yaze
|
||||
20
src/util/hex.h
Normal file
20
src/util/hex.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef YAZE_UTIL_HEX_H
|
||||
#define YAZE_UTIL_HEX_H
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace yaze {
|
||||
namespace util {
|
||||
|
||||
struct HexStringParams {
|
||||
enum class Prefix { kNone, kDollar, kHash, k0x } prefix = Prefix::kDollar;
|
||||
bool uppercase = true;
|
||||
};
|
||||
|
||||
std::string HexByte(uint8_t byte, HexStringParams params = {});
|
||||
std::string HexWord(uint16_t word, HexStringParams params = {});
|
||||
std::string HexLong(uint32_t dword, HexStringParams params = {});
|
||||
std::string HexLongLong(uint64_t qword, HexStringParams params = {});
|
||||
|
||||
} // namespace util
|
||||
} // namespace yaze
|
||||
Reference in New Issue
Block a user