mirror of
https://github.com/php/php-src.git
synced 2026-04-29 11:13:36 +02:00
add fast bin2hex string function
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user