不使用循环将C中的char *转换为大写

时间:2018-02-22 06:23:37

标签: c arrays string algorithm

是否可以将char *转换为大写而不在循环中逐个字符遍历?

假设:
1.字符指针指向固定大小的字符串数组 2.指向的数组仅包含小写字符

1 个答案:

答案 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个字符)。

如果您的代码允许,最好将缓冲区长度扩展到下一个更大的数据类型,以便可以在单个操作中更新所有字节。但是不要忘记恢复终止空值。