C# 字符串按 ASCII碼 排序的方法
在和銀行做數(shù)據(jù)對(duì)接時(shí),涉及到數(shù)據(jù)傳輸時(shí)的驗(yàn)簽及加密。其中數(shù)據(jù)簽名方案中就要求數(shù)據(jù)項(xiàng)根據(jù)屬性名按 ASCII碼 進(jìn)行升序排序。C#中的ASCII碼排序并不是表面上那么簡(jiǎn)單,一不小心就入坑了。因?yàn)镃#的排序默認(rèn)并不是按照ASCII碼進(jìn)行排序的。舉個(gè)例子, 我有這樣一個(gè)字符串?dāng)?shù)組,然后對(duì)其排序。
string[] vv = { "1", "2", "A", "a", "B", "b" }; Array.Sort(vv); //結(jié)果 1 2 a A b B
如果是按照ASCII碼進(jìn)行排序的話,順序應(yīng)該是: 1, 2, A, B, a, b 而實(shí)際排序后的結(jié)果則是:1, 2, a, A, b, B . 這也就是說(shuō)Sort()方法默認(rèn)情況下并不是按ASCII碼進(jìn)行排序的。之后我也同樣測(cè)試了C#中的OrderBy()的排序,發(fā)現(xiàn)它默認(rèn)情況下也并不是按照ASCII碼進(jìn)行的排序。
string[] vv = { "1", "2", "A", "a", "B", "b" }; vv.OrderBy(x => x); //結(jié)果 1 2 a A b B
那么既然默認(rèn)排序不是按ASCII碼進(jìn)行的排序,我們要怎么做呢? 看下面代碼,只需要在原來(lái)排序方法上再加個(gè)參數(shù): string.CompareOrdinal。string.CompareOrdinal會(huì)把每個(gè)字符先轉(zhuǎn)成相應(yīng)的數(shù)值(如 a 轉(zhuǎn)為數(shù)值 97),然后再對(duì)數(shù)值進(jìn)行比較。
Array.Sort(vv, string.CompareOrdinal); //ASCII排序
注:掉入這個(gè)坑是因?yàn)槠鸪醪恢廊绾螌?duì)字符做ASCII碼排序,于是百度了一把。得到的結(jié)果就是這個(gè)C# 參數(shù)按照ASCII碼從小到大排序(字典序) 而當(dāng)我采用這種方式時(shí),銀行驗(yàn)簽?zāi)遣绞冀K通不過(guò),調(diào)試發(fā)現(xiàn)我排序后的結(jié)果和銀行那邊的不同。
以上所述是小編給大家介紹的C# 字符串按 ASCII碼 排序的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 二叉排序樹(shù)的實(shí)現(xiàn)與基本操作
- 詳解Java二叉排序樹(shù)
- C語(yǔ)言二叉排序(搜索)樹(shù)實(shí)例
- C#代碼實(shí)現(xiàn)撲克牌排序的幾種方式
- C#實(shí)現(xiàn)的二維數(shù)組排序算法示例
- C# ListView 點(diǎn)擊表頭對(duì)數(shù)據(jù)進(jìn)行排序功能的實(shí)現(xiàn)代碼
- C# 參數(shù)按照ASCII碼從小到大排序(字典序)
- C#七大經(jīng)典排序算法系列(上)
- C#實(shí)現(xiàn)冒泡排序算法的代碼示例
- C#中哈希表(HashTable)用法實(shí)例詳解(添加/移除/判斷/遍歷/排序等)
- 逐步講解快速排序算法及C#版的實(shí)現(xiàn)示例
- C#使用IComparer自定義List類(lèi)實(shí)現(xiàn)排序的方法
- C#實(shí)現(xiàn)二叉排序樹(shù)代碼實(shí)例
相關(guān)文章
C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
本文給大家介紹的是C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法,十分的方便也很實(shí)用,有需要的小伙伴可以參考下。2015-06-06Unity動(dòng)畫(huà)混合樹(shù)實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了Unity動(dòng)畫(huà)混合樹(shù)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11C#采用HttpWebRequest實(shí)現(xiàn)保持會(huì)話上傳文件到HTTP的方法
這篇文章主要介紹了C#采用HttpWebRequest實(shí)現(xiàn)保持會(huì)話上傳文件到HTTP的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08C#編程實(shí)現(xiàn)DataTable添加行的方法
這篇文章主要介紹了C#編程實(shí)現(xiàn)DataTable添加行的方法,結(jié)合兩個(gè)實(shí)例形式分析了C#操作DataTable實(shí)現(xiàn)動(dòng)態(tài)添加行的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11winform實(shí)現(xiàn)創(chuàng)建最前端窗體的方法
這篇文章主要介紹了winform實(shí)現(xiàn)創(chuàng)建最前端窗體的方法,涉及C#窗體屬性設(shè)置的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08將excel數(shù)據(jù)轉(zhuǎn)換成dataset示例
這篇文章主要介紹了不借助第三方插件的情況下將Excel中的數(shù)據(jù)轉(zhuǎn)換成DataSet的方法,需要的朋友可以參考下2014-02-02