4 ms·
Regarding STMP-command-style lookup: A more portable way to do that is to define a macro to assemble the 4 bytes into unsigned int: #define CHAR4_TO_UINT(a,b
by mkup 15y ago
Regarding STMP-command-style lookup:
A more portable way to do that is to define a macro to assemble the 4 bytes into unsigned int:
#define CHAR4_TO_UINT(a,b,c,d) \
( \
((unsigned int)(a)) | \
( ((unsigned int)(b))<<8 )| \
( ((unsigned int)(c))<<16 )| \
( ((unsigned int)(d))<<24 ) \
)
then
unsigned int ui_cmdword = CHAR4_TO_UINT(
cmdword[0], cmdword[1], cmdword[2], cmdword[3]
);
if( ui_cmdword == CHAR4_TO_UINT('H','E','L','O') )
handle_helo();
else if( ui_cmdword == CHAR4_TO_UINT('E','H','L','O') )
handle_ehlo();
А compiler will generate memory-fetching code once, optimize right side of comparisons into constants and make everything flow fast and safe. You can even use switch statement if you like.