实现大小写转换有两种常见思路:利用二进制位规律,或利用 ASCII 码差值规律。

方法一:利用二进制位规律

观察 ASCII 编码可以发现,大写字母与对应小写字母的编码差恰好是第 5 位(0x20)。因此,转小写只需将第 5 位置 1(与 0x20 或),转大写只需将第 5 位清零(与 0xDF 与)。

char toLower(char x)
{
	if (x >= 'A' && x <= 'Z')return  (x | 0x20);
	return x;
}


char    toUpper(char x)
{
	if (x >= 'a' && x <= 'z')return  (x  & 0xDF);
	return x;
}

方法二:利用 ASCII 码差值规律

大写字母 'A''Z' 与小写字母 'a''z' 之间存在固定的差值 'a' - 'A'(即 32)。转小写时加上该差值,转大写时减去该差值。


char toLower(char x)
{
	if (x >= 'A' && x <= 'Z')return  (x+ 'a'-'A');
	return x;
}

char toUpper(char x)
{
	if (x >= 'a' && x <= 'z')return  (x - 'a' + 'A');
	return x;
}