rendered paste body#include <cstdio>#include <cstring>#include <ctime>#include <cassert>/*!\brief Simple timer class.*/class SimpleTimer{ clock_t d_baseTime;public: SimpleTimer() : d_baseTime(clock()) {} void restart() { d_baseTime = clock(); } double elapsed() { return static_cast<double>(clock() - d_baseTime) / CLOCKS_PER_SEC; }};unsigned as_hex(const char* value){ unsigned x = 0; const unsigned char* ptr = (const unsigned char*)value; unsigned char b; unsigned char count = 0; while ((b = *ptr++) && (++count <= sizeof(unsigned)*2)) { x <<= 4; switch (b) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': x |= b - '0'; break; case 'A': case 'a': x |= 10; break; case 'B': case 'b': x |= 11; break; case 'C': case 'c': x |= 12; break; case 'D': case 'd': x |= 13; break; case 'E': case 'e': x |= 14; break; case 'F': case 'f': x |= 15; break; default: return 0; } } return x;}double t1_avg = 0;double t2_avg = 0;const unsigned N = 500000;static char data[N][8];void init(){ for (unsigned i=0; i<N; ++i) { sprintf(data[i], "%X", i); }}void bench(){ SimpleTimer timer; timer.restart(); for (unsigned i=0; i<N; ++i) { unsigned x = as_hex(data[i]); assert(x == i); } double t1 = timer.elapsed(); t1_avg += t1; timer.restart(); for (unsigned i=0; i<N; ++i) { unsigned x; sscanf(data[i], "%X", &x); assert(x == i); } double t2 = timer.elapsed(); t2_avg += t2; printf("as_hex = %0.6f s\nsscanf = %0.6f s\n", t1, t2);}int main(){ init(); int NN = 15; for (int i=0; i<NN; ++i) bench(); t1_avg /= NN*N; t2_avg /= NN*N; printf("as_hex avg = %E s\nsscanf avg = %E s\n", t1_avg, t2_avg); return 0;}as_hex = 0.031000 ssscanf = 0.109000 sas_hex = 0.032000 ssscanf = 0.109000 sas_hex = 0.031000 ssscanf = 0.110000 sas_hex = 0.015000 ssscanf = 0.125000 sas_hex = 0.016000 ssscanf = 0.109000 sas_hex = 0.031000 ssscanf = 0.110000 sas_hex = 0.031000 ssscanf = 0.109000 sas_hex = 0.016000 ssscanf = 0.125000 sas_hex = 0.031000 ssscanf = 0.094000 sas_hex = 0.031000 ssscanf = 0.110000 sas_hex = 0.015000 ssscanf = 0.110000 sas_hex = 0.031000 ssscanf = 0.109000 sas_hex = 0.032000 ssscanf = 0.093000 sas_hex = 0.032000 ssscanf = 0.109000 sas_hex = 0.031000 ssscanf = 0.094000 sas_hex avg = 5.413333E-008 ssscanf avg = 2.166667E-007 s