Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert ascii char[] to hexadecimal char[] in C

Tags:

c

hex

ascii

I am trying to convert a char[] in ASCII to char[] in hexadecimal.

Something like this:

hello --> 68656C6C6F

I want to read by keyboard the string. It has to be 16 characters long.

This is my code now. I don't know how to do that operation. I read about strol but I think it just convert str number to int hex...

#include <stdio.h>
main()
{
    int i = 0;
    char word[17];

    printf("Intro word:");

    fgets(word, 16, stdin);
    word[16] = '\0';
    for(i = 0; i<16; i++){
        printf("%c",word[i]);
    }
 }

I am using fgets because I read is better than fgets but I can change it if necessary.

Related to this, I am trying to convert the string read in a uint8_t array, joining each 2 bytes in one to get the hex number.

I have this function which I am using a lot in arduino so I think it should work in a normal C program without problems.

uint8_t* hex_decode(char *in, size_t len, uint8_t *out)
{
    unsigned int i, t, hn, ln;

    for (t = 0,i = 0; i < len; i+=2,++t) {

            hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0';
            ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0';

            out[t] = (hn << 4 ) | ln;
            printf("%s",out[t]);
    }
    return out;

}

But, whenever I call that function in my code, I get a segmentation fault.

Adding this code to the code of the first answer:

    uint8_t* out;
    hex_decode(key_DM, sizeof(out_key), out);

I tried to pass all necessary parameters and get in out array what I need but it fails...

like image 765
Biribu Avatar asked May 13 '13 09:05

Biribu


People also ask

Does Atoi work on hex?

Does atoi work on hex? atoi(s[,base]) converts a string into an integer. The default is decimal, but you can specify octal 8, hexadecimal 16, or decimal 10.

How do you convert ascii to string?

To convert ASCII to string, use the toString() method. Using this method will return the associated character.


2 Answers

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

int main(void){
    char word[17], outword[33];//17:16+1, 33:16*2+1
    int i, len;

    printf("Intro word:");
    fgets(word, sizeof(word), stdin);
    len = strlen(word);
    if(word[len-1]=='\n')
        word[--len] = '\0';

    for(i = 0; i<len; i++){
        sprintf(outword+i*2, "%02X", word[i]);
    }
    printf("%s\n", outword);
    return 0;
}
like image 99
BLUEPIXY Avatar answered Sep 30 '22 10:09

BLUEPIXY


replace this

printf("%c",word[i]);

by

printf("%02X",word[i]);
like image 43
MOHAMED Avatar answered Sep 30 '22 09:09

MOHAMED