diff --git a/include/utils.hpp b/include/utils.hpp index e24bb5e10..c36d8f961 100644 --- a/include/utils.hpp +++ b/include/utils.hpp @@ -123,6 +123,46 @@ namespace hex { throw std::invalid_argument("Invalid value size!"); } + inline std::string makePrintable(char c) { + switch (c) { + case 0: return "NUL"; + case 1: return "SOH"; + case 2: return "STX"; + case 3: return "ETX"; + case 4: return "EOT"; + case 5: return "ENQ"; + case 6: return "ACK"; + case 7: return "BEL"; + case 8: return "BS"; + case 9: return "TAB"; + case 10: return "LF"; + case 11: return "VT"; + case 12: return "FF"; + case 13: return "CR"; + case 14: return "SO"; + case 15: return "SI"; + case 16: return "DLE"; + case 17: return "DC1"; + case 18: return "DC2"; + case 19: return "DC3"; + case 20: return "DC4"; + case 21: return "NAK"; + case 22: return "SYN"; + case 23: return "ETB"; + case 24: return "CAN"; + case 25: return "EM"; + case 26: return "SUB"; + case 27: return "ESC"; + case 28: return "FS"; + case 29: return "GS"; + case 30: return "RS"; + case 31: return "US"; + case 32: return "Space"; + case 127: return "DEL"; + default: return std::string() + c; + } + } + class ScopeExit { public: diff --git a/source/views/view_data_inspector.cpp b/source/views/view_data_inspector.cpp index 0e5803bf3..fec0f6b53 100644 --- a/source/views/view_data_inspector.cpp +++ b/source/views/view_data_inspector.cpp @@ -50,8 +50,8 @@ namespace hex { this->m_cachedData.emplace_back("uint64_t", hex::format("%llu", hex::changeEndianess(this->m_previewData.unsigned64, this->m_endianess))); this->m_cachedData.emplace_back("int64_t", hex::format("%lld", hex::changeEndianess(this->m_previewData.signed64, this->m_endianess))); - this->m_cachedData.emplace_back("ANSI Character / char8_t", hex::format("%c", hex::changeEndianess(this->m_previewData.ansiChar, this->m_endianess))); - this->m_cachedData.emplace_back("Wide Character / char16_t", hex::format("%lc", hex::changeEndianess(this->m_previewData.wideChar, this->m_endianess))); + this->m_cachedData.emplace_back("ASCII Character", hex::format("'%s'", makePrintable(this->m_previewData.ansiChar).c_str())); + this->m_cachedData.emplace_back("Wide Character", hex::format("'%lc'", this->m_previewData.wideChar == 0 ? '\x01' : hex::changeEndianess(this->m_previewData.wideChar, this->m_endianess))); { char buffer[5] = { 0 }; char codepointString[5] = { 0 }; diff --git a/source/views/view_tools.cpp b/source/views/view_tools.cpp index 013d2663f..91e3975d5 100644 --- a/source/views/view_tools.cpp +++ b/source/views/view_tools.cpp @@ -4,6 +4,8 @@ #include #include +#include "utils.hpp" + namespace hex { ViewTools::ViewTools() { @@ -29,46 +31,6 @@ namespace hex { delete[] this->m_regexPattern; } - static std::string toASCIITableString(char c) { - switch (c) { - case 0: return "NUL"; - case 1: return "SOH"; - case 2: return "STX"; - case 3: return "ETX"; - case 4: return "EOT"; - case 5: return "ENQ"; - case 6: return "ACK"; - case 7: return "BEL"; - case 8: return "BS"; - case 9: return "TAB"; - case 10: return "LF"; - case 11: return "VT"; - case 12: return "FF"; - case 13: return "CR"; - case 14: return "SO"; - case 15: return "SI"; - case 16: return "DLE"; - case 17: return "DC1"; - case 18: return "DC2"; - case 19: return "DC3"; - case 20: return "DC4"; - case 21: return "NAK"; - case 22: return "SYN"; - case 23: return "ETB"; - case 24: return "CAN"; - case 25: return "EM"; - case 26: return "SUB"; - case 27: return "ESC"; - case 28: return "FS"; - case 29: return "GS"; - case 30: return "RS"; - case 31: return "US"; - case 32: return "Space"; - case 127: return "DEL"; - default: return std::string() + c; - } - } - void ViewTools::drawDemangler() { if (ImGui::CollapsingHeader("Itanium demangler")) { if (ImGui::InputText("Mangled name", this->m_mangledBuffer, 0xF'FFFF)) { @@ -127,7 +89,7 @@ namespace hex { ImGui::Text("0x%02x", i + 32 * tablePart); ImGui::TableNextColumn(); - ImGui::Text("%s", toASCIITableString(i + 32 * tablePart).c_str()); + ImGui::Text("%s", makePrintable(i + 32 * tablePart).c_str()); ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0, ((rowCount % 2) == 0) ? 0xFF101010 : 0xFF303030);