-
-
Save denisdemaisbr/ec38deda6e4b970a71755b5669e598eb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <sys/time.h> | |
#include <sys/resource.h> | |
double get_time() | |
{ | |
struct timeval t; | |
struct timezone tzp; | |
gettimeofday(&t, &tzp); | |
return t.tv_sec + t.tv_usec * 1e-6; | |
} | |
static char hexconvtab[] = "0123456789abcdef"; | |
static char* ts_bin2hex(const unsigned char *old, const size_t oldlen) | |
{ | |
char *result = (char*) malloc(oldlen * 2 + 1); | |
size_t i, j; | |
int b = 0; | |
for (i = j = 0; i < oldlen; i++) { | |
b = old[i] >> 4; | |
result[j++] = (char) (87 + b + (((b - 10) >> 31) & -39)); | |
b = old[i] & 0xf; | |
result[j++] = (char) (87 + b + (((b - 10) >> 31) & -39)); | |
} | |
result[j] = '\0'; | |
return result; | |
} | |
static char* php_bin2hex(const unsigned char *old, const size_t oldlen) | |
{ | |
char *result = (char*) malloc(oldlen * 2 + 1); | |
size_t i, j; | |
for (i = j = 0; i < oldlen; i++) { | |
result[j++] = hexconvtab[old[i] >> 4]; | |
result[j++] = hexconvtab[old[i] & 15]; | |
} | |
result[j] = '\0'; | |
return result; | |
} | |
main() | |
{ | |
char *t, *s = "this is a test"; | |
size_t len = sizeof("this is a test"); | |
int i; | |
double start, end; | |
start = get_time(); | |
for (i = 0; i < 1000000; i++) { | |
t = php_bin2hex(s, len); | |
free(t); | |
} | |
end = get_time(); | |
printf("PHP bin2hex In %f Seconds\r\n", end - start); | |
start = get_time(); | |
for (i = 0; i < 1000000; i++) { | |
t = ts_bin2hex(s, len); | |
free(t); | |
} | |
end = get_time(); | |
printf("TS bin2hex In %f Seconds\r\n", end - start); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <sys/time.h> | |
#include <sys/resource.h> | |
double get_time() | |
{ | |
struct timeval t; | |
struct timezone tzp; | |
gettimeofday(&t, &tzp); | |
return t.tv_sec + t.tv_usec * 1e-6; | |
} | |
static char *php_hex2bin(const unsigned char *old, const size_t oldlen) | |
{ | |
size_t target_length = oldlen >> 1; | |
char *str = (char *) malloc(target_length); | |
unsigned char *ret = str; | |
size_t i, j; | |
for (i = j = 0; i < target_length; i++) { | |
unsigned char c = old[j++]; | |
unsigned char d; | |
if (c >= '0' && c <= '9') { | |
d = (c - '0') << 4; | |
} else if (c >= 'a' && c <= 'f') { | |
d = (c - 'a' + 10) << 4; | |
} else if (c >= 'A' && c <= 'F') { | |
d = (c - 'A' + 10) << 4; | |
} else { | |
free(str); | |
return NULL; | |
} | |
c = old[j++]; | |
if (c >= '0' && c <= '9') { | |
d |= c - '0'; | |
} else if (c >= 'a' && c <= 'f') { | |
d |= c - 'a' + 10; | |
} else if (c >= 'A' && c <= 'F') { | |
d |= c - 'A' + 10; | |
} else { | |
free(str); | |
return NULL; | |
} | |
ret[i] = d; | |
} | |
ret[i] = '\0'; | |
return str; | |
} | |
static char *ts_hex2bin(const unsigned char *old, const size_t oldlen) { | |
size_t target_length = oldlen >> 1; | |
char *str = (char *) malloc(target_length); | |
size_t i; | |
for (i = 0; i < target_length; i++) { | |
int temp = -1; | |
int t2 = 0; | |
int ch = (unsigned char) old[2 * i]; | |
// if (ch > 0x2f && ch < 0x3a) ret += ch - 0x30 + 1; // -47 | |
temp += (((0x2f - ch) & (ch - 0x3a)) >> 8) & (ch - 47); | |
ch |= 0x20; | |
// if (ch > 0x60 && ch < 0x67) ret += ch - 0x61 + 10 + 1; // -86 | |
temp += (((0x60 - ch) & (ch - 0x67)) >> 8) & (ch - 86); | |
t2 = temp << 4; | |
temp = -1; | |
ch = (unsigned char) old[2 * i + 1]; | |
// if (ch > 0x2f && ch < 0x3a) ret += ch - 0x30 + 1; // -47 | |
temp += (((0x2f - ch) & (ch - 0x3a)) >> 8) & (ch - 47); | |
ch |= 0x20; | |
// if (ch > 0x60 && ch < 0x67) ret += ch - 0x61 + 10 + 1; // -86 | |
temp += (((0x60 - ch) & (ch - 0x67)) >> 8) & (ch - 86); | |
t2 |= temp; | |
if (0 != (t2 >> 8)) { | |
free(str); | |
return NULL; | |
} | |
str[i] = (char) t2 & 0xFF; | |
} | |
str[i] = '\0'; | |
return str; | |
} | |
main() | |
{ | |
char *t, *s = "fFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfF"; | |
size_t len = sizeof("fFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfFfF"); | |
int i; | |
double start, end; | |
start = get_time(); | |
for (i = 0; i < 1000000; i++) { | |
t = php_hex2bin(s, len); | |
free(t); | |
} | |
end = get_time(); | |
printf("PHP hex2bin In %f Seconds\r\n", end - start); | |
start = get_time(); | |
for (i = 0; i < 1000000; i++) { | |
t = ts_hex2bin(s, len); | |
free(t); | |
} | |
end = get_time(); | |
printf("TS hex2bin In %f Seconds\r\n", end - start); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment