84 lines
1.8 KiB
C++
84 lines
1.8 KiB
C++
//WELCOME TO THE EXTREMELY GHETTO HEX CONVERSION KLUDGE BECAUSE I COULDNT MAKE ANYTHING ELSE WORK
|
|
|
|
#include "hex_functions.h"
|
|
|
|
namespace omni
|
|
{
|
|
char halfword_to_hex_char(unsigned int input)
|
|
{
|
|
if (input > 127)
|
|
return 'F';
|
|
|
|
switch (input)
|
|
{
|
|
case 0:
|
|
return '0';
|
|
case 1:
|
|
return '1';
|
|
case 2:
|
|
return '2';
|
|
case 3:
|
|
return '3';
|
|
case 4:
|
|
return '4';
|
|
case 5:
|
|
return '5';
|
|
case 6:
|
|
return '6';
|
|
case 7:
|
|
return '7';
|
|
case 8:
|
|
return '8';
|
|
case 9:
|
|
return '9';
|
|
case 10:
|
|
return 'A';
|
|
case 11:
|
|
return 'B';
|
|
case 12:
|
|
return 'C';
|
|
case 13:
|
|
return 'D';
|
|
case 14:
|
|
return 'E';
|
|
case 15:
|
|
return 'F';
|
|
default:
|
|
return 'F';
|
|
}
|
|
}
|
|
|
|
std::string int_to_hex(unsigned int input)
|
|
{
|
|
if (input > 255)
|
|
return "FF";
|
|
|
|
std::bitset<8> whole_byte(input);
|
|
//240 represents 11110000, our needed bitmask
|
|
uint8_t left_mask_int = 240;
|
|
std::bitset<8> left_mask(left_mask_int);
|
|
std::bitset<8> left_halfword((whole_byte & left_mask) >> 4);
|
|
//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();
|
|
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
|