Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/articles/cpp-tutorials/)
-   -   Another Hex to String (http://www.go4expert.com/articles/hex-string-t29509/)

david_BS 22Feb2013 23:25

Another Hex to String
 
1 Attachment(s)
This is a basic attempt to accomplish this, there is already a real big load of code about this matter... I wanted to use a different approach, I created 1 table that contains all the 256 bytes, and i used it to make the conversion.. you look at the code, better

The tables
Code:

/********************************************************************************************************

// By 85
// boyscout_arg@hotmail.com
// etalking.com.ar
// David Riedel
// 2013

*********************************************************************************************************/

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

/////
/////////////////////////////////////

char* hextabla[] = { //256 BYTES
        "00","01","02","03","04","05","06","07","08","09",
        "0A","0B","0C","0D","0E","0F","10","11","12","13",
        "14","15","16","17","18","19","1A","1B","1C","1D",
        "1E","1F","20","21","22","23","24","25","26","27",
        "28","29","2A","2B","2C","2D","2E","2F","30","31",
        "32","33","34","35","36","37","38","39","3A","3B",
        "3C","3D","3E","3F","40","41","42","43","44","45",
        "46","47","48","49","4A","4B","4C","4D","4E","4F",
        "50","51","52","53","54","55","56","57","58","59",
        "5A","5B","5C","5D","5E","5F","60","61","62","63",
        "64","65","66","67","68","69","6A","6B","6C","6D",
        "6E","6F","70","71","72","73","74","75","76","77",
        "78","79","7A","7B","7C","7D","7E","7F","80","81",
        "82","83","84","85","86","87","88","89","8A","8B",
        "8C","8D","8E","8F","90","91","92","93","94","95",
        "96","97","98","99","9A","9B","9C","9D","9E","9F",
        "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9",
        "AA","AB","AC","AD","AE","AF","B0","B1","B2","B3",
        "B4","B5","B6","B7","B8","B9","BA","BB","BC","BD",
        "BE","BF","C0","C1","C2","C3","C4","C5","C6","C7",
        "C8","C9","CA","CB","CC","CD","CE","CF","D0","D1",
        "D2","D3","D4","D5","D6","D7","D8","D9","DA","DB",
        "DC","DD","DE","DF","E0","E1","E2","E3","E4","E5",
        "E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
        "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9",
        "FA","FB","FC","FD","FE","FF",
};

//////////////

Bytes to String
Code:

void Test1(BYTE* array_de_bytes, char* cadena_de_bytes_en_formato_string){ //Cadena de bytes a string

        for(int i=0; i<(int)strlen( (char*)array_de_bytes); i++)
                strcat(cadena_de_bytes_en_formato_string,hextabla[(int)array_de_bytes[i]]);
        printf(cadena_de_bytes_en_formato_string);
        printf("\n");
}

//////////

String to Bytes
Code:

void Test2(char* cadena_de_bytes, BYTE* cadena_de_bytes_resultante){//String a cadena de bytes

        int bytes=0;
        for(int i=0; i<(int)strlen( cadena_de_bytes); i+=2){
                for(int j=0; j<256; j++){
                        if( cadena_de_bytes[i]==hextabla[j][0] && cadena_de_bytes[i+1]==hextabla[j][1] ){
                                cadena_de_bytes_resultante[bytes++]=j;
                                j=256;
                        }
                }
        }
        for(int x=0; x<(int)strlen( cadena_de_bytes)/2; x++)
                printf("%X",*(cadena_de_bytes_resultante+x));
        printf("\n");
}

///////

The test program
Code:

int main(){//Programa

        BYTE* array_de_bytes = (BYTE*)"\x68\x68\x68\x68\x68\x68\xFF\xFF\xFF\xFF\x69";
        char cadena_de_bytes_en_formato_string[256];
        memset(cadena_de_bytes_en_formato_string,0,sizeof(cadena_de_bytes_en_formato_string));
        printf("TEST1:\n");
        Test1(array_de_bytes, cadena_de_bytes_en_formato_string);
        system("pause");

        char* cadena_de_bytes = (char*)"686868686868FFFFFFFF69\0";
        BYTE* cadena_de_bytes_resultante = (BYTE*)"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
        printf("TEST2:\n");
        Test2(cadena_de_bytes, cadena_de_bytes_resultante);
        system("pause");

return 0;
}

To get the full project in MSVC++ 6, see attachment


All times are GMT +5.5. The time now is 10:46.