Search code examples
cstringhexansi-c

Save hex value from input text to a string var and vice versa ANSI C


I need to save the hex of a text to a string:

_____________________
Input: apple

Output: 6170706c65
_____________________

char * text = "apple";
char * hextext = convertToHex(text); // -> ?! I don't know how

printf("Hextext is %s\n", hextext); // -> Hextext is 6170706c65

and

char * hextext = 6170706c65;
char * text = convertToText(hextext);

printf("Text is %s\n", text);

Using Printf, its easy using %hx, but I need the values on the variables!

Can anybody help, please?! Thanks.


My final code:

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

void convertToHex(char* input, char** output)
{
    char* ptr;
    int i;

    // Allocate memory for hex string
    *output = malloc(2 * strlen(input) + 1);

    // Initialize pointer to start of the output buffer
    ptr = *output;

    // Read each char in input. Use sprintf to append the 2 char hex value.
    // Finally advance the pointer 2 places in the output buffer.
    for(i=0; i<strlen(input); i++) 
    {
        sprintf(ptr, "%x", input[i]);
        ptr++; ptr++;
    }
}

void convertHexToString(char* input, char** output)
{
    char* ptr;
    int c;

    // Allocate memory for hex string
    *output = malloc(2 * (strlen(input)/2)%2==0 ? (strlen(input)/2) + 1 : (strlen(input)/2));

    // Initialize pointer to start of the output buffer
    ptr = *output;

    // Read two char in input. Use sprintf to append the char value.
    // Finally advance the input place in the output buffer.
    for (;input[0] && input[1] && sscanf(input, "%2x", &c); input += 2) 
    {
        sprintf(ptr, "%c", c);
        ptr++;
    }
}

int main(void)
{
    char* text = "apple";
    char* hexkey;
    char* strtext;

    convertToHex(text, &hexkey);

    printf("Input: %s\n", text);
    printf("Output: %s\n", hexkey);

    convertHexToString(hexkey, &strtext);

    printf("\nInput2: %s\n", hexkey);
    printf("Output2: %s\n", strtext);

    free(hexkey);
    free(strtext);

    return 0;
}

Special thanks to Erik Nedwidek for help!


Solution

  • Here's what I was referring to:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void convertToHex(char* input, char** output) {
      char* ptr;
      int i;
    
      // Allocate memory for hex string
      *output = malloc(2 * strlen(input) + 1);
      // Initialize pointer to start of the output buffer
      ptr = *output;
    
      // Read each char in input. Use sprintf to append the 2 char hex value.
      // Finally advance the pointer 2 places in the output buffer.
      for(i=0; i<strlen(input); i++) {
        sprintf(ptr, "%x", input[i]);
        ptr++; ptr++;
      }
    }
    
    int main(void) {
      char* text = "apple";
      char* hex;
      convertToHex(text, &hex);
      printf("Input: %s\n", text);
      printf("Output: %s\n", hex);
    
      free(hex);
    
      return 0;
    }
    

    The output is:

    Input: apple 
    Output: 6170706c65