#pragma once #include "JDefines.h" namespace Incart::Common { class HexFormatter // форматный преобразователь данных в HEX представление { public: static std::string toHex(unsigned z) { static char str[10]; sprintf(str, "%x", z); return std::string(str); } static std::string toHex(uint8_t* z, int ln) { static char buf[10]; static std::string str(400,0); str = "{ "; for (int i = 0; i < ln; i++) { sprintf(buf, "%02x ", z[i]); str += buf; } str += "} "; return str; } static std::string toHex(std::string z) { return toHex( reinterpret_cast(z.data()), static_cast(z.size())); } static std::string toHexW2(unsigned z) { static char str[10]; sprintf(str, "%02x", z); return std::string(str); } static std::string toHexW4(unsigned z) { static char str[10]; sprintf(str, "%04x", z); return std::string(str); } static std::string toHexW8(unsigned z) { static char str[10]; sprintf(str, "%08x", z); return std::string(str); } static std::string toHexW16(quint64 z) { static char buf[8]; static std::string str(32,0); str = "0x"; bool flg = false; // это не работает для бит старше 32 // sprintf_s(str, "%016x", z); uint8_t* p = (uint8_t*)&z; int ln = sizeof(quint64); for (int i = 0; i < ln; i++) { sprintf(buf,"%02x", p[ln-1-i]); if(p[ln-1-i]!=0) flg = true; if(flg)str += buf; } if(!flg) str += "00"; return str; } }; } // namespace Incart::Common