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...
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.
To convert ASCII to string, use the toString() method. Using this method will return the associated character.
#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;
}
replace this
printf("%c",word[i]);
by
printf("%02X",word[i]);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With