Free C++ Binary and Hex Utility Class

//
// 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

Published by techinfodebug

Flex and Java Developer, Christian, Art, Music, Video, and Vlogging

Leave a comment