Array of bytes to string
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 6 of 6

Thread: Array of bytes to string

  1. #1
    Join Date
    Feb 2013
    Posts
    26

    Array of bytes to string

    Using a table with the 256 bytes as strings, said table is used as a reference in the 2 functions of this code. Functions who make the conversion such as the title establishes, and in the inverse way too.

    The main adventage is that you don't need any knowledge about managing bytes with c++..

    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",
    };
    
    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");
    }
    
    //////////
    
    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");
    }
    
    ///////
    
    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;
    }
    ima leave the project in MSVCPP 6, see attachment
    It's ready to compile in 'Release' mode.
    Attached Files Attached Files

  2. #2
    Join Date
    Dec 2012
    Location
    England
    Posts
    2,000

    Re: Array of bytes to string

    So what's the programming question? This isn't the place to highlight some code you're written!!!!!

  3. #3
    Join Date
    Feb 2013
    Posts
    26

    Re: Array of bytes to string

    I'm sorry the moderator, can move this to the correct section?

  4. #4
    Join Date
    Feb 2013
    Location
    United States
    Posts
    56

    Resolved Re: Array of bytes to string

    hhhhhh˙˙˙˙i eightyfive,

    The real advantage to using a look-up table is that the code will run much faster than doing a bunch of calculations. However, doing a linear scan through the table to find its inverse function, as you have done in Test2(), will run very slowly. You could use another look-up table to convert the hexadecimal characters back to decimal numbers.

    Code:
    void Test2(char* cadena_de_bytes, BYTE* cadena_de_bytes_resultante)
    {
    	static  BYTE Tabla[256] =
    	{
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
    		0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    	};
    
    	int Position;
    	int Length_de_bytes_resultante; // :)
    
    	Position = 0;
    	while (cadena_de_bytes[Position] != '\0')
    	{
    		cadena_de_bytes_resultante[Position >> 1] = (Tabla[cadena_de_bytes[Position]] << 4) + Tabla[cadena_de_bytes[Position + 1]];
    		Position = Position + 2;
    	}
    	Length_de_bytes_resultante = Position >> 1;
    
    	for (Position = 0; Position < Length_de_bytes_resultante; Position = Position + 1)
    	{
    		printf("%02X", cadena_de_bytes_resultante[Position]);
    	}
    	printf("\n");
    
    }
    Note: Calling the strlen() function inside the test condition of the for loop means it will be called for every iteration of the loop. This is very inefficient since the strlen() function must loop through the character array every time to determine the length. If you are going to use the strlen() function, assign the result to a variable and use that variable in the loop's test condition.

  5. #5
    Join Date
    Feb 2013
    Posts
    1

    Re: Array of bytes to string

    copy CADO-VN1.COM de xem chi tiet huong dan

    huong dan ca cuoc tren mang
    huong dan ca cuoc online
    huong dan ca do bong da
    huong dan ca cuoc bong da
    huong dan ca do tren mang
    huong dan ca cuoc tren mang
    huong dan ca cuoc bong da

  6. #6
    Join Date
    Feb 2013
    Posts
    26

    Re: Array of bytes to string

    yeahh well about that of the strlen, i knew that it would be made every loop, but this is actually the second version of this program.. see the previous version:
    http://foro.elhacker.net/programacio...t383814.0.html
    perhaps I didn't care about taht i'm not sure

    great idea with the second function!, the first function uses the table to "lookup", but the second didn't manage to make that. The idea was anyways to make a program to manage this conversion, for a person that doesn't know about bytes managing, that's why my code hasn't applied the normal logic to handle byte to decimal convertion, and the inverse operation.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center