将输入文本的十六进制值保存到字符串var,反之亦然ANSI C

时间:2013-11-17 00:58:19

标签: c string hex ansi

我需要将文本的十六进制保存为字符串:

_____________________
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

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

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

使用Printf,它很容易使用%hx,但我需要变量的值!

有人可以帮忙吗?! 感谢。


我的最终代码:

#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;
}

特别感谢Erik Nedwidek的帮助!

1 个答案:

答案 0 :(得分:0)

这就是我所说的:

#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;
}

输出结果为:

Input: apple 
Output: 6170706c65