asp.net C#大小写转换详解

假设有一个string “BaSiC”,需要将它转变为大小写,那么该如何转换?

 

 

最简单的方式:调用api:

 代码如下 复制代码

string str = "BaSiC";

string strUpper = str.ToUpper();

string strLower = str.ToLower();

 

 

第二种方法:调用Char.ToUpper(),Char.ToLower()方法,同样是调用api

 

 

第三种方法:使用for循环来判断,如果是大写就,如果是小写就..

首先观察大写字母和小写字母的异同:

 

打印上面的代码如下,有兴趣的可以自己试试打印这样的表格出来:

 

 代码如下 复制代码

Console.WriteLine("{0,-3} | {1,-6} | {2,-8} | {3,-3} | {4,-6} | {5,-8}",

    "小写", "ascil", "2进制", "大写", "ascil", "2进制");

 

 

IEnumerable<char> chars = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (char)i);

foreach (char c in chars)

{

    char upperC = char.ToUpper(c);

    Console.WriteLine("{0,-5} | {1,-6} | {2,-10} | {3,-5} | {4,-6} | {5,-10}",

        c, (int)c, Convert.ToString(c, 2),

        upperC, (int)upperC, Convert.ToString(upperC, 2));

}

 

从上面很容易看的出来’a’ 比大写的’A’ 的ascil多32,从这点出发就可以得到下面的代码:

 代码如下 复制代码

private static char[] GetUpperChars(string str)

{

    char[] chars = str.ToCharArray();

 

 

    for (int i = 0; i < chars.Length; i++)

    {

        if (char.IsLower(chars[i]))

        {

            chars[i] = (char)(chars[i] - 32);

        }

    }

 

 

    return chars;

}

这段代码使用for循环并加入判断,如果是小写,则将其值减去32,调用也比较简单:

 代码如下 复制代码

string strUpper2 = new string(GetUpperChars(str));

 

 

这段代码唯一的缺点是进行了IsLower的判断,可不可以在没有判断的情况下来修改chars使其变成大写呢?

如果从Ascii 的角度来解决这个问题,那么我们就必须使用大小写的判断,我在汇编语言的书上看到了这句话:

 

 

如果一个问题的解决方案,使我们陷入一种矛盾之中,那么很可能是我们考虑问题的出发点有了问题,或者说我们起初运用的规律并不适合。

 

  

这段话的意思是,可能我们应该从其他角度来观察,而不应该从Ascii的角度来观察。

如果不从Ascii的角度来观察,那还能从哪里来观察呢?

可以从2进制的角度来观察。

还是这幅图,只是我们的观察角度变成了2进制。

 

 

a 的2进制:1100001, b的2进制1100010,..

A 的2进制: 1000001, B的2进制1000010,..

 

 

可以知道a的第5位是1,而A的第5位是0,(从右边往左边数,0开始,后面得第几位都这样数)

        b的第5位是1,而B的第5位是0,

        ..

所以如果要将一个字符串变成大写,只需要将字符串的所有字符的第5位全部变成1就可以了。

而如何将一个字符的第5位变成1呢?

答案是使用And(位运算)操作.

首先a 是个7位字符,只所以是7位,是因为在制定Ascii的时候位比较贵,8位比较浪费,而6位又不够,所以ascii码是7位的,这点从

a 是1100001 就可以看出了,总共7位。

它可以和0101-1111 或者是1101-1111,进行And

 

 

在C#中And 是&

 

 

所以你可能会将函数修改为:

 代码如下 复制代码

for (int i = 0; i < chars.Length; i++)

{

    chars[i] = (char)(chars[i] & 11011111);

}

 

 

先停一下,你认为上面的写法正确吗?

 

 

 

 

然后运行,结果却发现:

 

为什么?

这是因为C#中的& 默认操作的是十进制的数字,所以11011111,

就会变成一千一百零一万一千一百一十一

所以要将2进制的11011111 变成10进制,如何转变?

int value = Convert.ToInt32("11011111", 2);

value的值是223.所以代码修改为:

 

 

 代码如下 复制代码

for (int i = 0; i < chars.Length; i++)

{

    chars[i] = (char)(chars[i] & 223);

}

 

 

运行可以得到正确的结果:

 

 

或者使用16进制来表示:1101-1111 ,的16进制是:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 1 2 3 4 5 6 7 8 9  A B  C  D E F

1101=2^3+2^2+1=8+4+1=13 = D

1111=2^3+2^2+2^1+2^0=8+4+2+1=15 = F

所以可以将上面的代码修改为:

 代码如下 复制代码

chars[i] = (char)(chars[i] & 0xdf);

 

 

同样因为只是第5位不同,而第7位会被忽略。所以和 0101-1111进行and操作也可以得到正确的答案:

而0101-1111 的16进制是0x5f.所以代码可以变成:

 代码如下 复制代码

chars[i] = (char)(chars[i] & 0x5f);
时间: 2024-09-17 04:23:36

asp.net C#大小写转换详解的相关文章

javascript英文字母大小写转换详解

toLocaleUpperCase 将字符串中所有的字母字符都将被转换为大写的,同时适应宿主环境的当前区域设置. toUpperCase 将字符串中的所有字母都被转化为大写字母.  代码如下 复制代码 <script type="text/javascript"> var str="hello world!" document.write(str.toUpperCase()) </script> 结果 HELLO WORLD! toLocal

转:ASP.NET验证控件详解

asp.net|控件|详解 ASP.NET验证控件详解 ASP.NET是微软推出的下一代WEB开发工具,其强大的功能立即吸引了一大批WEB开发者投入它的靡下.现在,我们来看看ASP.NET的验证控件,感受ASP.NET的强大功能同时方便我们现在的WEB开发. WEB开发者特别是ASP开发者,一直对数据验证比较恼火,当你好不容易写出数据提交程序的主体以后,还不得不花大把时间去验证用户的每一个输入是否合法.如果开发者熟悉JavaScript或者VBScript,可以用这些脚本语言轻松实现验证,但是又

JSON字符串和对象之间的转换详解

  这篇文章主要介绍了JSON字符串和对象之间的转换详解,需要的朋友可以参考下 JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集.正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中. eval函数 JSON文本转换为对象 为了将JSON文本转换为对象,可以使用eval函数.eval函数调用JavaScript编辑器.由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构.文本必须括在括号

asp 内置对象 Application 详解

asp内置对象 Application 详解  在 ASP 的内建对象中除了用于发送.接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个用户信息的对象.  让我们先来看看 Application 对象.在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据.而且,Application 对象还有控制访问应用层数据的方法

asp 内置对象 Application 详解_ASP基础

asp内置对象 Application 详解  在 ASP 的内建对象中除了用于发送.接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个用户信息的对象.  让我们先来看看 Application 对象.在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据.而且,Application 对象还有控制访问应用层数据的方法

Oracle CBO几种基本的查询转换详解

Oracle CBO几种基本的查询转换详解 查询转换(Query Transformation),又称为逻辑优化(Logical Optimization),也称为软优化,即查询转换器在逻辑上对语句做一些语义等价转换,从而能使优化器生成效率更高的执行计划. 语句在被提交到Oracle后,解析器(Parser)会对SQL语句的语法.语义进行分析,并将查询中的视图展开.划分为小的查询块(Query Block).它们是嵌套或者相互关联的,而查询形式则决定了它们之间是如何关联的.这些查询块被传送给了查

ASP实例之计数器程序详解

程序|计数器|详解   Active Server Pager(动态服务器主页,简称ASP),通过读写服务器的文件,结合script语言(VBscript或Jscript)和html码可以方便地实现页面计数器功能.现流行的ASP教材和网络上的ASP教程都谈到过ASP计数器的设计问题,但是都过于简单,比如没有提到怎样实现计数器脚本和主页面的分离以及图象计数器的实现等.下面就作者为单位制作NT web站点的经验,举实例循序渐进谈谈关于ASP计数器的设计,希望能给ASP的初学者和对ASP WEB编程有

ASP编码和解码函数详解_应用技巧

用ASP开发的时候遇到一个解码问题.虽然在ASP中使用Request获取编码过URL字符串会自动解码,但是Request.BinaryRead(Request.TotalBytes)取得Post数据时却不会解码,所以只能手动进行解码.ASP解码函数: Function URLDecode(enStr) dim deStr,strSpecial dim c,i,v deStr="" strSpecial="!""#$%&'()*+,.-_/:;<

ASP中FormatDateTime函数用法详解

FormatDateTime 函数 返回表达式,此表达式已被格式化为日期或时间. FormatDateTime(Date[, NamedFormat]) 参数 参数 描述 date Required. Any valid date expression (like Date() or Now()) 必选项.要被格式化的日期表达式.(如Date()或Now()) format Optional. A Format value that specifies the date/time format