From: Sascha Schumann Date: Sun, 16 May 1999 11:12:23 +0000 (+0000) Subject: add fast bin2hex string function X-Git-Tag: BEFORE_PHP4_APACHE_MODULE_CHANGE~32 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed8a7dff62baac1396edd66770bfc70f2f5f8097;p=php add fast bin2hex string function --- diff --git a/ext/standard/php3_string.h b/ext/standard/php3_string.h index 04c2f79f95..af90dbec5f 100644 --- a/ext/standard/php3_string.h +++ b/ext/standard/php3_string.h @@ -79,6 +79,7 @@ extern void php3_setlocale(INTERNAL_FUNCTION_PARAMETERS); extern void php3_stristr(INTERNAL_FUNCTION_PARAMETERS); extern void php3_chunk_split(INTERNAL_FUNCTION_PARAMETERS); extern void php3_parsestr(INTERNAL_FUNCTION_PARAMETERS); +PHP_FUNCTION(bin2hex); extern PHPAPI char *_php3_strtoupper(char *s); extern PHPAPI char *_php3_strtolower(char *s); diff --git a/ext/standard/string.c b/ext/standard/string.c index 133f817f17..2964d463ab 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -43,6 +43,50 @@ #include "zend_execute.h" #include "php_globals.h" +static char hexconvtab[] = "0123456789abcdef"; + +static char *php_bin2hex(const char *old, const size_t oldlen, size_t *newlen) +{ + char *new = NULL; + int i, j; + + new = (char *) emalloc(oldlen * 2 * sizeof(char)); + if(!new) { + return new; + } + + for(i = j = 0; i < oldlen; i++) { + new[j++] = hexconvtab[old[i] >> 4]; + new[j++] = hexconvtab[old[i] & 15]; + } + + if(newlen) *newlen = oldlen * 2 * sizeof(char); + + return new; +} + +/* proto bin2hex(string data) + converts the binary representation of data to hex */ +PHP_FUNCTION(bin2hex) +{ + pval *data; + char *new; + size_t newlen; + + if(ARG_COUNT(ht) != 1 || getParameters(ht, 1, &data) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string(data); + + new = php_bin2hex(data->value.str.val, data->value.str.len, &newlen); + + if(!new) { + RETURN_FALSE; + } + + RETURN_STRINGL(new, newlen, 0); +} /* {{{ proto int strlen(string str) Get string length */