ASCII コードの A
~Z
、a
〜z
は以下のような配置になっています。
A(01000001) ~ Z(01011000)
a(01100001) ~ z(01111000)
つまり、6 番目のビット (10進数で32) が 1 ならば大文字、0 ならば小文字になります。 これを利用して、ビット演算で大文字と小文字の変換を行うことができます(32 を足し引きしても同じことができます)。
char str[] = "HelloWorld";
int n = strlen(str);
for (int i = 0; i < n; ++i) {
str[i] |= 0x20;
}
cout << str << endl;
for (int i = 0; i < n; ++i) {
str[i] &= ~0x20;
}
cout << str << endl;
for (int i = 0; i < n; ++i) {
str[i] ^= 0x20;
}
cout << str << endl;