Better INT to HEX conversion.

Reimplementation of `4e96a41b4ee6bbc920b7c5a5ec555d6d14e65b18`,
`bb0b767ba40d189b97ffe371ab063c5380609b0c` and
`e36dae20b7d1baba912c55ec55b82a380c4973da` from old origin.
This commit is contained in:
Cerapter 2018-08-19 09:20:16 +02:00
parent c316e81e0c
commit e6eace9a39
2 changed files with 13 additions and 28 deletions

View File

@ -4,7 +4,7 @@
namespace omni namespace omni
{ {
char halfword_to_hex_char(unsigned int input) /*char halfword_to_hex_char(unsigned int input)
{ {
if (input > 127) if (input > 127)
return 'F'; return 'F';
@ -46,38 +46,19 @@ namespace omni
default: default:
return 'F'; return 'F';
} }
} }*/
std::string int_to_hex(unsigned int input) std::string int_to_hex(unsigned int input)
{ {
if (input > 255) if (input > 255)
return "FF"; return "FF";
std::bitset<8> whole_byte(input); std::stringstream stream;
//240 represents 11110000, our needed bitmask stream << std::setfill('0') << std::setw(sizeof(char)*2)
uint8_t left_mask_int = 240; << std::hex << input;
std::bitset<8> left_mask(left_mask_int); std::string result(stream.str());
std::bitset<8> left_halfword((whole_byte & left_mask) >> 4); std::transform(result.begin(), result.end(), result.begin(), ::toupper);
//likewise, 15 represents 00001111
uint8_t right_mask_int = 15;
std::bitset<8> right_mask(right_mask_int);
std::bitset<8> right_halfword((whole_byte & right_mask));
unsigned int left = left_halfword.to_ulong(); return result;
unsigned int right = right_halfword.to_ulong();
//std::cout << "now have have " << left << " and " << right << '\n';
char a = halfword_to_hex_char(left);
char b = halfword_to_hex_char(right);
std::string left_string(1, a);
std::string right_string(1, b);
std::string final_byte = left_string + right_string;
//std::string final_byte = halfword_to_hex_char(left) + "" + halfword_to_hex_char(right);
return final_byte;
} }
} //namespace omni } //namespace omni

View File

@ -4,10 +4,14 @@
#include <bitset> #include <bitset>
#include <cstdint> #include <cstdint>
#include <iostream> #include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <sstream>
namespace omni namespace omni
{ {
char halfword_to_hex_char(unsigned int input); //char halfword_to_hex_char(unsigned int input);
std::string int_to_hex(unsigned int input); std::string int_to_hex(unsigned int input);
} }