使用ASCII码处理字母大小写

大写字母ASCII码的二进制和16进制表示:

A -> 0100-0001 -> 41

Z -> 0101-1010 -> 5A

小写字母ASCII码的二进制和16进制表示:

a -> 0110-0001 -> 61

z -> 0111-1010 -> 7A

观察可以发现大写字母和小写字母二进制ASCII码的差别在从左数第三位,大写字母该位为0小写字母该位为1。可以利用这点完成字母的大小写的判定和转换,具体来说:

大小写判定:

//char ch;

bool is_lowercase = ch & 0x20;

检验代码:

#include<iostream>

using namespace std;

int main() {

char ch1 = 'a', ch2 = 'A';

bool is_lowercase = ch1 & 0x20;

is_lowercase ? printf("%c is lowercase.\n", ch1) : 0;

is_lowercase = ch2 & 0x20;

is_lowercase ? 0 : printf("%c is not lowercase.", ch2);

}

运行结果:

使用ASCII码处理字母大小写

大小写转换:

//大写转小写,使用"或"运算符

ch |= 0b0010-0000;

ch |= 0x20;


//小写转大写,使用"与"运算符

ch &= 0b1101-1111;

ch &= 0xDF;


//大小写转换通用操作,使用"异或"运算符

ch ^= 0b0010-0000;

ch ^= 0x20;

关于异或运算的性质:

  1.  与0异或原位不变

  2. 与1异或原位变反(0变1,1变0)

检验代码:

#include<iostream>
using namespace std;
int main(){
    char pos[26];
    for (int i = 0; i != 26; ++i) {
        pos[i] = 'a' + i;
        cout << pos[i] << " ";
    }

    cout << endl;

    for (auto ch : pos) {
        cout << (ch ^= 0x20) << " ";
    }
}

}

运行结果:

使用ASCII码处理字母大小写

上一篇:.Net Core实现选择数据热更新,让服务感知配置的变化


下一篇:解析HTTP数据流的传输过程