一:背景
在字符串处理时,我们会经常用到大小写转换,我们会经常用到if(tem_char <='z' && tem_char>='a') tem_char-=0x20,其实是大规模的转换中,其效率并不高,判断和减法这样的操作也可以进一步优化。参考开源软件hashcat,里面有个非常高效的大小写转换方法。
二:源代码
代码只用了一些高效逻辑操作就完成了大小写的转换。
static uint32 generate_cmask (uint32 buf)
{
const uint32 rmask = ((buf & 0x40404040) >> 1)
& ~((buf & 0x80808080) >> 2);
const uint32 hmask = (buf & 0x1f1f1f1f) + 0x05050505;
const uint32 lmask = (buf & 0x1f1f1f1f) + 0x1f1f1f1f;
return rmask & ~hmask & lmask;
}