Well, simply and ineffectively :) - for example, like this:
int main(int argc, const char * argv[]) { char * in = "48656c6c6f0a"; char hex[3]; int x; for(char * c = in; *c; ++c) { hex[0] = *c++; hex[1] = *c; hex[2] = 0; sscanf(hex,"%x",&x); printf("%c",x); } }
We take two characters from the incoming string, scan it as a hexadecimal value, print it as char ...
Or even shorter:
int main(int argc, const char * argv[]) { char * in = "48656c6c6f0a"; int x; for(; *in; in+=2) { sscanf(in,"%2x",&x); printf("%c",x); } }
Without sscanf :
int toInt(char c) { if ((c >= '0') && (c <= '9')) return c-'0'; if ((c >= 'a') && (c <= 'f')) return c-'a'+10; if ((c >= 'A') && (c <= 'F')) return c-'A'+10; printf("Wrong symbol!\n"); exit(1); } int main(int argc, const char * argv[]) { char * in = "48656c6c6f0a"; int x; for(; *in; in+=2) { x = toInt(*in)*16+toInt(*(in+1)); printf("%c",x); } }