Another Hex to String

david_BS's Avatar author of Another Hex to String
This is an article on Another Hex to String in C++.
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
Attached Files
File Type: rar HEX_2_STRING_II.rar (24.1 KB, 3 views)