//
// Created by jason on 12/1/2021.
//
#ifndef GAMEENGINEOPENSOURCESTARTER_BINARYUTIL_H
#define GAMEENGINEOPENSOURCESTARTER_BINARYUTIL_H
#include <iostream>
#include <math.h>
class BinaryUtil {
public:
string convertBinaryToString(string message) {
string returnString;
for (int i=0; i<message.length(); i+=8) {
returnString+=convertByteStringToCharacter(message.substr(i,i+8));
}
returnString;
}
string convertHexToString(string message) {
string returnString;
for (int i=0; i<message.length(); i+=2) {
returnString+=convertHexStringToCharacter(message.substr(i,i+2));
}
return returnString;
}
char convertByteStringToCharacter(string byteString) {
// 00101010
int value = 0;
for (int i=7; i>=0; i--) {
if (byteString[i]=='1') {
value+=pow(2,i);
}
}
char characterValue = value;
return characterValue;
}
char convertHexStringToCharacter(string byteString) {
// 00101010
int value = 0;
int finalValue = 0;
for (int i=1; i>=0; i--) {
switch (byteString[i]) {
case '0':
value = 0;
break;
case '1':
value = 1;
break;
case '2':
value = 2;
break;
case '3':
value = 3;
break;
case '4':
value = 4;
break;
case '5':
value = 5;
break;
case '6':
value = 6;
break;
case '7':
value = 7;
break;
case '8':
value = 8;
break;
case '9':
value = 9;
break;
case 'A':
value = 10;
break;
case 'B':
value = 11;
break;
case 'C':
value = 12;
break;
case 'D':
value = 13;
break;
case 'E':
value = 14;
break;
case 'F':
value = 15;
break;
}
if (i==1) {
finalValue=value*16;
} else {
finalValue+=value;
}
}
char characterValue = finalValue;
return characterValue;
}
string convertStringToBinary(string message) {
string returnString;
for (int i=0; i<message.length(); i++) {
returnString+=convertCharacterToBinary(message[i]);
}
return returnString;
}
string convertStringToHex(string message) {
string returnString;
for (int i=0; i<message.length(); i++) {
returnString+=convertCharacterToHex(message[i]);
}
return returnString;
}
string convertCharacterToBinary(char character) {
int value = character;
string returnString;
while (value > 0) {
if (value % 2==1) {
returnString.append("1");
} else {
returnString.append("0");
}
value = value/2;
}
return returnString;
}
string convertCharacterToHex(char character) {
int value = character;
string returnString;
while (value > 0) {
int mod = value%16;
if (mod<10) {
returnString += to_string(mod);
} else {
switch (value % 16) {
case 10: returnString += 'A'; break;
case 11: returnString += 'B'; break;
case 12: returnString += 'C'; break;
case 13: returnString += 'D'; break;
case 14: returnString += 'E'; break;
case 15: returnString += 'F'; break;
}
}
value = value/16;
}
return returnString;
}
private:
Logger logger;
};
#endif //GAMEENGINEOPENSOURCESTARTER_BINARYUTIL_H
Test Class
//
// Created by jason on 12/1/2021.
//
#ifndef GAMEENGINEOPENSOURCESTARTER_TESTRUNNER_H
#define GAMEENGINEOPENSOURCESTARTER_TESTRUNNER_H
#include "../utility/logger.h"
#include "../utility/BinaryUtil.h"
class TestRunner {
private:
BinaryUtil binaryUtil;
Logger log;
public:
void testHexConversion() {
string originalMessage = "Test Message 1234567Hi how are you test";
cout << "Convert character to Hex test: " << binaryUtil.convertCharacterToHex('T') << endl;
string testHex = binaryUtil.convertStringToHex(originalMessage);
cout << "Convert string to Hex test: " << testHex << endl;
string decryptHex = binaryUtil.convertHexToString(testHex);
cout << "Reverse Hex to string: " << decryptHex << endl;
if (decryptHex.compare(originalMessage)==0) {
log.info("HEX Conversion worked successfully");
} else {
log.error("HEX Conversion test failed");
}
}
void testBinaryConversion() {
string binaryMessage = binaryUtil.convertStringToBinary("This is a test message");
cout << binaryMessage << endl;
char testCharacter = binaryUtil.convertByteStringToCharacter("00101010");
int value = testCharacter;
cout << "value: " << value << testCharacter << endl;
if (testCharacter == 'T') {
log.info("binaryUtil.convertByteStringToCharacter passed test");
} else {
log.error("Test failed character does not equal T");
}
}
void testBinaryUtil() {
testBinaryConversion();
testHexConversion();
}
};
#endif //GAMEENGINEOPENSOURCESTARTER_TESTRUNNER_H
Tested with MinGw and CLion from JetBrains