C# 字符串按 ASCII碼 排序,注意其中的小坑
在和銀行做數據對接時,涉及到數據傳輸時的驗簽及加密。其中數據簽名方案中就要求數據項根據屬性名按 ASCII碼 進行升序排序。C#中的ASCII碼排序並不是表面上那么簡單,一不小心就入坑了。因為C#的排序默認並不是按照ASCII碼進行排序的。舉個例子, 我有這樣一個字符串數組,然后對其排序。
string[] vv = { "1", "2", "A", "a", "B", "b" }; Array.Sort(vv); //結果 1 2 a A b B
如果是按照ASCII碼進行排序的話,順序應該是: 1, 2, A, B, a, b 而實際排序后的結果則是:1, 2, a, A, b, B . 這也就是說Sort()方法默認情況下並不是按ASCII碼進行排序的。之后我也同樣測試了C#中的OrderBy()的排序,發現它默認情況下也並不是按照ASCII碼進行的排序。
string[] vv = { "1", "2", "A", "a", "B", "b" }; vv.OrderBy(x => x); //結果 1 2 a A b B
那么既然默認排序不是按ASCII碼進行的排序,我們要怎么做呢? 看下面代碼,只需要在原來排序方法上再加個參數: string.CompareOrdinal。string.CompareOrdinal會把每個字符先轉成相應的數值(如 a 轉為數值 97),然后再對數值進行比較。
Array.Sort(vv, string.CompareOrdinal); //ASCII排序