是否可以将char *转换为大写而不在循环中逐个字符遍历?
假设:
1.字符指针指向固定大小的字符串数组
2.指向的数组仅包含小写字符
答案 0 :(得分:-2)
在ASCII编码中,将小写转换为大写相等于设置权重32的位(即20H,space
字符)。
使用按位运算符
Char|= 0x20;
您可以通过在阵列上映射更长的数据类型来一次处理多个字符。例如,要转换11个字符的数组,
int ToUpper= 0x20202020;
*(int*) &Char[0]|= ToUpper;
*(int*) &Char[4]|= ToUpper;
*(short*)&Char[8]|= ToUpper;
Char[10]|= ToUpper;
使用SIMD内在函数(SSE,AVX),您可以使用64位整数甚至更大(一次最多512位= 64个字符)。
如果您的代码允许,最好将缓冲区长度扩展到下一个更大的数据类型,以便可以在单个操作中更新所有字节。但是不要忘记恢复终止空值。