c语言写大小写转化加密解密,C语言对字符进行大小写转化的精简代码&汇编底层分析...

首先用C(C++)语言对字符串的中的字符进行大小写转换时,需要对字母的阿斯克码进行比较,如果是大写转换成小写,相应的要加32,反之减32。

代码如下:

#include

using namespace std;

int main()

{

char

s1[]="IAmTheSuperStar";

char

s2[]="IAmTheSuperStar";

cout<

cout<

int i;

for(i=0;i

if(s1[i]>='a'&&s1[i]<='z') s1[i]=s1[i]-32;

cout<

cout<

for(i=0;i

if(s2[i]>='A'&&s2[i]<='Z') s2[i]=s2[i]+32;

cout<

system("pause");

return

0;

}

精简代码:

#include

using namespace std;

int main()

{

char

s1[]="IAmTheSuperStar";

char

s2[]="IAmTheSuperStar";

cout<

int i;

for(i=0;i

{

s1[i]=s1[i]&0xDF;//小写字母转换成大写字母

s2[i]=s2[i]|0x20;//大写字母转换成小写字母

}

cout<

cout<

cout<

cout<

system("pause");

return

0;

}

PS:由于空格处理起来会产生偏差,所以字符串里就不安排空格了,就从编程复杂度来讲并没有怎么降低,只是从汇编的思想来解释为什么“s1[i]=s1[i]&0xDF;//小写字母转换成大写字母

s2[i]=s2[i]|0x20;//大写字母转换成小写字母 ”。下面来解释这两行代码:

我们知道小写字母的ASCⅡ码值比大写字母的ASCⅡ码值大20H,即32。如果将“a”的ASCⅡ码值减去20H,就可以得到“A”;反之亦然。可以看出,就ASCⅡ码的二进制形式来看,除第5位(位数从0开始计算)外,大写字母和小写字母的其他各位都一样。只是大写字母ASCⅡ码的第5位为0,0000|0000|0000|0000;而小写字母的ASCⅡ码的第5位为1,0000|0000|0100|0000。这样我们就有了新的方法,一个字母,不管原来是大写还是小写,将它的第5位置0,它就必将变成大写字母;将它的第5位置1,它就必将变成小写字母。在这个方法中,我们不需要在处理前判断字母的大小写。

完整的汇编程序:

assume cs:codesg,ds:datasg

datasg segment

db 'BaSic'

db 'iNfOrMaTiOn'

datasg ends

codesg segment

start: mov ax,datasg

mov ds,ax ;设置ds指向datasg段

mov

bx,0 ;设置(bx)=0,ds:bx指向'BaSiC'的第一个字母

mov

cx,5 ;设置循环次数5,因为'BaSiC'有5个字母

s:mov a1,[bx] ;将ASCⅡ码从ds:bx所指向的单元中取出

and

a1,11011111B ;将al中的ASCⅡ码的第5位置为0,变为大写字母

mov [bx],a1 ;将转变后的ASCⅡ码写回原单元

inc

bx ;(bx)加1,ds:bx指向下一个字母

loop s

mov

bx,5 ;设置(bx)=5,ds:bx指向'iNfOrMaTiOn'的第一个字母

mov cx,11 ;设置循环次数11,因为'iNfOrMaTiOn'有11个字母

s0:mov

a1,[bx]

or a1,00100000B ;将al中的ASCⅡ码的第5位置为1,变为小写字母

mov

[bx],a1

inc bx

loop s0

mov ax,4c00h

int 21h

codesg ends

end start

此汇编代码来自汇编语言(第2版)--王爽著,一本学习汇编语言非常好的入门书,作者是计算机科学教育家和哲学家,所以书写得很易懂,看完一遍受益匪浅,一本好处,读起来应该是有趣的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值