亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

解析C#中不一樣的大小寫轉換

2020-01-26 16:14:54
字體:
來源:轉載
供稿:網友

假設有一個string “BaSiC”,需要將它轉變為大小寫,那么該如何轉換?

最簡單的方式:調用api

string str = "BaSiC";

string strUpper = str.ToUpper();

string strLower = str.ToLower();

第二種方法:調用Char.ToUpper(),Char.ToLower()方法,同樣是調用api

第三種方法:使用for循環來判斷,如果是大寫就,如果是小寫就..

首先觀察大寫字母和小寫字母的異同:

image

打印上面的代碼如下,有興趣的可以自己試試打印這樣的表格出來:

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進制的角度來觀察。

image

還是這幅圖,只是我們的觀察角度變成了2進制。

a 2進制:1100001, b2進制1100010..

A 2進制: 1000001, B2進制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);

}

先停一下,你認為上面的寫法正確嗎?

然后運行,結果卻發現:

image

 

為什么?

這是因為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);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久18| 日韩成人激情在线| 亚洲免费人成在线视频观看| 亚洲精品久久久久中文字幕欢迎你| 欧美日韩精品在线播放| 麻豆乱码国产一区二区三区| 国产偷亚洲偷欧美偷精品| 91精品啪在线观看麻豆免费| 国产精品免费网站| 91在线国产电影| 俺也去精品视频在线观看| 一本色道久久88综合亚洲精品ⅰ| 在线观看不卡av| 精品视频中文字幕| 国产精品嫩草视频| 国产精品成人一区二区三区吃奶| 精品高清美女精品国产区| 韩国精品美女www爽爽爽视频| 成人精品视频久久久久| 91亚洲午夜在线| 久久久久久一区二区三区| 亚洲精品资源在线| 日韩视频免费在线观看| 成人av番号网| 国产精品美女无圣光视频| 国产精品高潮呻吟久久av野狼| 伊人久久久久久久久久久久久| 亚洲影院高清在线| 精品欧美国产一区二区三区| 欧美性在线视频| 久久激情五月丁香伊人| 欧美性生交xxxxx久久久| 91国产视频在线| 亚洲视频在线观看免费| 日韩av综合网站| 久精品免费视频| 中文字幕亚洲天堂| 欧美一区二区三区……| 国产欧美日韩亚洲精品| 这里只有精品视频| 日韩欧美中文字幕在线观看| 欧美激情在线一区| 欧美在线亚洲在线| 亚洲国产精品网站| 亚洲a一级视频| 97精品一区二区三区| 亚洲色图50p| 成人黄色免费在线观看| 久久久久久999| 亚洲一区www| 欧美理论电影在线播放| 亚洲国产欧美精品| 中文字幕在线国产精品| 中文字幕欧美日韩精品| 欧美性猛xxx| 911国产网站尤物在线观看| 米奇精品一区二区三区在线观看| 国产精品美女久久久久久免费| 在线播放日韩欧美| 日本精品久久久久久久| 欧美黑人xxxx| 91精品国产精品| 91精品视频一区| 91av视频在线| 2024亚洲男人天堂| 国产97色在线| 日本精品性网站在线观看| 91亚洲国产精品| 91网在线免费观看| 91免费福利视频| 亚洲国产精品美女| 尤物99国产成人精品视频| 亚洲国产又黄又爽女人高潮的| 久久av红桃一区二区小说| 国产精品亚洲精品| 国产拍精品一二三| 国产一区二区在线免费视频| 91精品国产自产在线| 成人免费看黄网站| 美女久久久久久久久久久| 成人黄色免费片| 欧美在线欧美在线| 亚洲欧美精品在线| 在线视频免费一区二区| 最好看的2019年中文视频| 成人激情视频免费在线| 精品激情国产视频| 久久久久久久久久国产精品| 欧美性黄网官网| 亚洲韩国日本中文字幕| 日韩hd视频在线观看| 国产一区二区欧美日韩| 亚洲美女中文字幕| 亚洲开心激情网| 欧美亚洲国产日本| 欧美激情视频网址| 伦伦影院午夜日韩欧美限制| 欧美视频二区36p| 国产精品久久久久免费a∨大胸| 岛国视频午夜一区免费在线观看| 国产精品网站视频| 欧美极品在线播放| 欧美极品少妇与黑人| 国产精品第8页| 亚洲美女中文字幕| 国产精品免费在线免费| 国产一区二区三区高清在线观看| 性夜试看影院91社区| 久久成年人免费电影| 日韩精品在线观| 国产精品久久国产精品99gif| 亚洲男人天堂视频| 精品久久久一区| 欧美洲成人男女午夜视频| 日韩av日韩在线观看| 在线观看国产精品淫| 欧美日韩国产成人在线观看| 美女性感视频久久久| 97激碰免费视频| 在线电影欧美日韩一区二区私密| 国产精品日韩欧美大师| 亚洲精品日韩丝袜精品| 日韩美女在线观看| 久久人体大胆视频| 亚洲欧美日韩天堂| 欧美精品一本久久男人的天堂| 亚洲激情在线观看| 亚洲精品91美女久久久久久久| 久久中文久久字幕| 国产日韩欧美中文| 国产精品一久久香蕉国产线看观看| 欧美激情视频三区| 国产精品女主播视频| 国产成人极品视频| 国产91精品最新在线播放| 69久久夜色精品国产69乱青草| 成人福利免费观看| 久久久av网站| 懂色av一区二区三区| 亚洲精品女av网站| 久久免费视频在线观看| 欧美一级高清免费播放| 国产mv久久久| 国产精品一区二区三区久久| 日韩美女在线看| 午夜精品国产精品大乳美女| 日韩视频在线免费| 日韩高清人体午夜| 国产精品丝袜久久久久久高清| 国产区精品在线观看| 精品国内亚洲在观看18黄| 91综合免费在线| 中文字幕av日韩| 欧美精品电影在线| 精品丝袜一区二区三区| 91久久嫩草影院一区二区| 国产福利视频一区| 日本久久久久久久久久久| 国产亚洲精品一区二555| 中文亚洲视频在线| 日韩免费在线电影| 欧美俄罗斯性视频| 亚洲福利在线视频| 久久久久久久一|