Skip to content

Instantly share code, notes, and snippets.

@bitforth
Created October 12, 2013 03:38
Show Gist options
  • Save bitforth/6945517 to your computer and use it in GitHub Desktop.
Save bitforth/6945517 to your computer and use it in GitHub Desktop.
función hex2bin en C, implementación en PHP
static char *php_hex2bin(const unsigned char *old, const size_t oldlen, size_t *newlen)
{
size_t target_length = oldlen >> 1;
register unsigned char *str = (unsigned char *)safe_emalloc(target_length, sizeof(char), 1);
size_t i, j;
for (i = j = 0; i < target_length; i++) {
char c = old[j++];
if (c >= '0' && c <= '9') {
str[i] = (c - '0') << 4;
} else if (c >= 'a' && c <= 'f') {
str[i] = (c - 'a' + 10) << 4;
} else if (c >= 'A' && c <= 'F') {
str[i] = (c - 'A' + 10) << 4;
} else {
efree(str);
return NULL;
}
c = old[j++];
if (c >= '0' && c <= '9') {
str[i] |= c - '0';
} else if (c >= 'a' && c <= 'f') {
str[i] |= c - 'a' + 10;
} else if (c >= 'A' && c <= 'F') {
str[i] |= c - 'A' + 10;
} else {
efree(str);
return NULL;
}
}
str[target_length] = '\0';
if (newlen)
*newlen = target_length;
return (char *)str;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment