/* radare - LGPL - Copyright 2007-2014 - pancake */ #include "r_types.h" #include "r_util.h" #include /* int c; ret = hex_to_byet(&c, 'c'); */ R_API int r_hex_to_byte(ut8 *val, ut8 c) { if ('0' <= c && c <= '9') *val = (ut8)(*val) * 16 + (c-'0'); else if (c >= 'A' && c <= 'F') *val = (ut8)(*val) * 16 + (c-'A'+10); else if (c >= 'a' && c <= 'f') *val = (ut8)(*val) * 16 + (c-'a'+10); else return 1; return 0; } /* int byte = hexpair2bin("A0"); */ // (0A) => 10 || -1 (on error) R_API int r_hex_pair2bin(const char *arg) { ut8 *ptr, c = 0, d = 0; ut32 j = 0; for (ptr = (ut8*)arg; ;ptr = ptr + 1) { if (!*ptr || *ptr==' ' || j==2) break; d = c; if (*ptr!='.' && r_hex_to_byte (&c, *ptr)) { eprintf ("Invalid hexa string at char '%c' (%s).\n", *ptr, arg); return -1; } c |= d; if (j++ == 0) c <<= 4; } return (int)c; } R_API int r_hex_bin2str(const ut8 *in, int len, char *out) { int i, idx; char tmp[5]; for (idx=i=0; i