#include "converter.hh" #include converter * converter::instance = NULL; uint16_t converter::swap(const uint16_t p_value) { uint8_t *ptr = (uint8_t *)&p_value; return (ptr[0] << 8) | ptr[1]; } uint32_t converter::swap(const uint32_t p_value) { uint8_t *ptr = (uint8_t *)&p_value; return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3]; } const std::string converter::lut = "0123456789ABCDEF"; std::string converter::string_to_hexa(const std::string & p_value) { std::string input(p_value); std::for_each( input.begin(), input.end(), [](char & c) { c = std::toupper(c); } ); std::string output; uint32_t length = p_value.length(); output.reserve(2 * length); for (uint32_t i = 0; i < length; ++i) { const uint8_t c = input[i]; output.push_back(lut[c >> 4]); output.push_back(lut[c & 15]); } // End of 'for' statement return output; } std::string converter::bytes_to_hexa(const std::vector & p_value) { std::string ret; ret.assign(p_value.size()*2, ' '); for(size_t i=0; i>4]; ret[i*2+1] = lut[c&0xF]; } return ret; } inline uint8_t char2byte(const char ch) { size_t s = converter::lut.find(ch); if(s == std::string::npos) throw (std::length_error("")); return s; } std::vector converter::hexa_to_bytes(const std::string & p_value) { // Sanity check std::vector output; size_t i=0, idx = 0, outlen=(p_value.length()+1) / 2; output.assign(outlen, 0x00); try{ if (p_value.length() & 1) output[idx++] = char2byte(p_value[i++]); for(;idx converter::split(const std::string & p_value, const std::string& p_separator) { std::vector output; std::size_t current, previous = 0; current = p_value.find(p_separator); while (current != std::string::npos) { output.push_back(p_value.substr(previous, current - previous)); previous = current + 1; current = p_value.find(p_separator, previous); } output.push_back(p_value.substr(previous, current - previous)); return output; } std::vector converter::split_arguments_line(const std::string & p_value) { std::vector output; std::string line = trim(p_value); if (!line.empty() && (line[0] == '-')) { // Valid command line size_t current = 0; size_t next = (size_t)-1; size_t pos = 0; do { if (line[pos + 1] == '-') { // -- current = pos + 2; } else { current = pos + 1; } next = line.find("-", current); std::string str(line.substr(pos, next - pos)); output.push_back(str); pos = next; } while (next != std::string::npos); } // else, invalid command line return output; }