| 12 | { |
| 13 | public: |
| 14 | static std::vector<unsigned char> de(const std::string& hex_str) |
| 15 | { |
| 16 | std::vector<unsigned char> result; |
| 17 | if (hex_str.empty()) return {}; |
| 18 | if (hex_str.length() % 2 != 0) return {}; |
| 19 | result.reserve(hex_str.length() / 2); |
| 20 | for (size_t i = 0; i < hex_str.length(); i += 2) |
| 21 | { |
| 22 | char c1 = static_cast<char>(std::tolower(static_cast<unsigned char>(hex_str[i]))); |
| 23 | char c2 = static_cast<char>(std::tolower(static_cast<unsigned char>(hex_str[i + 1]))); |
| 24 | if (!std::isxdigit(static_cast<unsigned char>(c1)) || !std::isxdigit(static_cast<unsigned char>(c2))) return {}; |
| 25 | int high = (c1 >= 'a') ? (c1 - 'a' + 10) : (c1 - '0'); |
| 26 | int low = (c2 >= 'a') ? (c2 - 'a' + 10) : (c2 - '0'); |
| 27 | result.push_back(static_cast<unsigned char>((high << 4) | low)); |
| 28 | } |
| 29 | return result; |
| 30 | } |
| 31 | static std::string en(const unsigned char* data, const size_t size) |
| 32 | { |
| 33 | if (!data || size <= 0) return {}; |
nothing calls this directly
no outgoing calls
no test coverage detected