首先来看看ASCII码相关的概念:
计算机中,所有的信息都是二进制,但是我们所能理解的信息是具有约束意义的字符。比如说,看到“desk”,我们就知道指的是桌子,但是如何将desk这个信息存放在计算中呢?这里就需要对desk进行编码,将其转换为计算机可以存储的二进制信息。当我们需要查看存储的信息时,就需要对二进制解码。因此只要编码和解码的规则一致,我们就可以将我们理解的信息存储到计算机,或者从计算机中取出。
至于编码和解码的规则有很多,其中有一种方案是ASCII编码,也是当前计算机系统采用的方案。 ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。这里我们只说基础ASCII码。
0~32以及127共34个是控制字符或者通信专用字符。比如:CR代表回车,FF代表换页,BS代表退格等。通信专用字符像ACK代表确认等。
33~126共95个是字符
  1. 48~57代表0~9十个阿拉伯数字
  2. 65~92:共26个大写英文字母
  3. 97~122共26个小写英文字母
剩下的便是一些标点符号,运算符号等。
当然我们注意到,一个ASCII码占用一个存储单元,也就是一个字节(8位),其中最高B7为用来做奇偶校验位。奇偶校验是指在代码传送过程中用来检验是否出现错误的一种方法,顾名思义分为奇校验和偶校验。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。比如说A的二进制:1100001。如果用奇校验,则B7应为0,即0110 0001.
详细见图:
ASCII码
键盘
ASCII 码
键盘
ASCII 码
键盘
ASCII 码
键盘
27
ESC
32
SPACE
33
!
34
"
35
#
36
$
37
%
38
&
39
'
40
(
41
)
42
*
43
+
44
'
45
-
46
.
47
/
48
0
49
1
50
2
51
3
52
4
53
5
54
6
55
7
56
8
57
9
58
:
59
;
60
<
61
=
62
>
63
?
64
@
65
A
66
B
67
C
68
D
69
E
70
F
71
G
72
H
73
I
74
J
75
K
76
L
77
M
78
N
79
O
80
P
81
Q
82
R
83
S
84
T
85
U
86
V
87
W
88
X
89
Y
90
Z
91
[
92
\
93
]
94
^
95
_
96
`
97
a
98
b
99
c
100
d
101
e
102
f
103
g
104
h
105
i
106
j
107
k
108
l
109
m
110
n
111
o
112
p
113
q
114
r
115
s
116
t
117
u
118
v
119
w
120
x
121
y
122
z
123
{
124
|
125
}
126
~
下面我们简单的认识一下编码和解码过程。
以文本编辑为例,在编辑过程中,当我们按下C键时,利用ASCII编码规则进行编码,转为十六进制的63H并存储在指定内存中,文本编辑器从内存中取出63H,送至显卡显存中,显卡来利用ASCII解码规则将63H在屏幕显示为C。
现在聊聊经常遇到的一道题目:不使用比较转换字母大小写。
大写      十六进制         二进制            小写           十六进制        二进制
A          41                    0100 0001    a               61               0110 0001
B          42                    0100 0010    b               62               0110 0010
C          43                    0100 0011    c               63               0110 0011
对比发现,小写字符的ASCII的码值比大写字母大20H,同时大写字母二进制与小写字母二进制的区别在于第5为是0还是1(位数从0开始)。因此转换大小写思路有两种:
  1. 基于第一种比较的方式:首先判断是大写还是小写字母,然后加20H或者减20H
  2. 基于就修改二进制的方式:任何一个字母将第5位置1,则转成小写,置0则是大写。
现在我们用思路2来实现,代码如下:
#include <iostream>
using namespace std ;
void toUpper( char * ptr );
void toLower( char * ptr );
int main( int argc , char ** argv ){char ptr [] = "ABCDabcd" ;toUpper (ptr );cout << ptr << endl ;toLower (ptr );cout << ptr << endl ;system ("pause" );
}
/*
*小写转换成大写
*/
void toUpper( char * ptr ){while (* ptr != '\0'){* ptr = (* ptr ) & 223 ; //与运算将第5位置0,223二进制1101 1111++ ptr;}
}
/*
*大写转小写
*/
void toLower( char * ptr ){while (* ptr != '\0'){* ptr = (* ptr )|32 ; //或运算将第5位置1,32二进制0010 0000++ ptr;}
}

ASCII简介及不经过比较转换字母大小写。相关推荐

  1. python字符串的切片方式是[n、m、不包括m_python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)...

    #可变变量:list, 字典 #不可变变量:元祖,字符串 字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / no ...

  2. 转换字母大小写(小写转大写)

    #include<stdio.h> int main() {     char a,b;     scanf("%c",&a);     b=a-32;     ...

  3. c语言access码大小写A转换,字母大小写互相转换 ASCII码转化符号问题

    15 回复 #2 PcrazyC2007-03-13 19:33 注意{ } #3 PcrazyC2007-03-13 19:34 #include void main() { char a,c; i ...

  4. java高效字符串首字母大小写转换

    通过找到一个移动ASCII的方式来处理字符串首字母大小写的问题 我们都知道在ascii 码表中 a的ASCIII码值是65而A的ASCII码值是 97 两个之间的差值是 32,所以,如果我们需要把一个 ...

  5. 位运算对字母大小写的转换

    位运算对字母大小写的转换 先定义一个字符 char c; 以下讨论默认 c 为字母 我们知道小写字母的ASCII值比其大写字母的大32,因此我们通常采取下面两种方式转换字母大小写 c = c + 32 ...

  6. 大小写字母转换(java大小写字母转换)

    苹果4SQQ密码大小写字母怎么转换不?苹果4SQQ密码大小写字母 每次要输密码,当时在电脑上设置的密码,可以改变大小写,但是到了手机上,我不知道怎么换大小写,那位朋友告诉下 苹果手机输入法怎么改字母的 ...

  7. c语言大小写字母相互转化,字母大小写互相转换 ASCII码转化符号问题

    字母大小写互相转换 ASCII码转化符号问题 请问在c语言中 字母大小写互相转换怎么编写? 请问为什么 #include void main() { char a,c; int b; printf(& ...

  8. java 字母大写_Java字母大小写转换的方法

    案例: 要求从控制台接收用户输入的一个字母,如果这个字母是小写,转换为大写:如果这个字母是大写,转换为小写:只能输入字母,如果是其他值,提示数据有误! 实现代码: import java.util.S ...

  9. ASCII码_字符与数字转换等问题

    判断函数 islower(char c) 小写字母 isupper(char c) 大写字母 isdigit(char c) 数字 isalpha(char c) 字母 isalnum(char c) ...

最新文章

  1. 清华学长免费分享Java基础核心知识大总结(1)
  2. 【2019-06-11】笔耕不辍
  3. 女性养生需知的16条健康戒律
  4. 享元模式(FlyWeight)
  5. Flink从入门到精通100篇(二十一)-万字长文详解 Flink 中的 CopyOnWriteStateTable
  6. 什么是分布式锁?redis、zookeeper、etcd实现分布式锁有什么不同之处?
  7. DOM Element
  8. sublime的使用
  9. 史上最全Oracle文件损坏处理办法(附实验步骤)
  10. 工商银行:应用多k8s集群管理及容灾实践
  11. 直接使用editbox.clear()清空时,有时会无法清除完全,此时有清空文本框的另一种方法...
  12. 效果良好!构造一个输入速度的神经网络,以DQN方式实现小游戏的自动控制
  13. 管理感悟:要知道感恩,要改正错误
  14. 翻译: 如何使用Xcode构建xcframework
  15. yum install gcc报错Error: Package: glibc-2.17-260.el7_6.6.i686 (updates) Requires: glibc-common = 2.17
  16. MybatisPlus官方文档
  17. linux下opendir的使用
  18. cs285深度强化学习课程笔记-lec1
  19. android别踩白块小游戏,手摸手带你实现 小游戏别踩白块儿 -- 内有游戏链接
  20. 关于二重积分,三重积分的理解

热门文章

  1. QT运行错误码:DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c000d ()
  2. 蓝牙HC-05 配对过程以及注意事项
  3. 【Android界面实现】模仿淘宝客户端倒计时控件
  4. python计算器_Python | 写个计算器
  5. nginx安装及其配置详细教程
  6. 每日简报 6月6日简报新鲜事 每天一分钟 了解新鲜事
  7. wordpress内链优化插件WP Keyword Link-华域联盟CHU
  8. 小金的2019年终总结
  9. matlab log函数怎么使用,matlab对数函数的用法和实例,来充电吧
  10. 【NOIP2012】开车旅行