C 字串按 ASCII碼 排序,注意其中的小坑

2022-02-16 03:28:03 字數 705 閱讀 1042

在和銀行做資料對接時,涉及到資料傳輸時的驗簽及加密。其中資料簽名方案中就要求資料項根據屬性名按 ascii碼 進行公升序排序。c#中的ascii碼排序並不是表面上那麼簡單,一不小心就入坑了。因為c#的排序預設並不是按照ascii碼進行排序的。舉個例子, 我有這樣乙個字串陣列,然後對其排序。

string vv = ;

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 = ;

vv.orderby(x => x); //

結果 1 2 a a b b

那麼既然預設排序不是按ascii碼進行的排序,我們要怎麼做呢? 看下面**,只需要在原來排序方法上再加個引數: string.compareordinal。string.compareordinal會把每個字元先轉成相應的數值(如 a 轉為數值 97),然後再對數值進行比較。

array.sort(vv, string.compareordinal); //

ascii排序

關於堆排序字串按ASCII碼公升序輸出問題

堆排序思路 在篩選sift的過程中,我們不必每乙個結點都要篩選,而是從最後乙個非葉子結點 n 2向上取整 到根結點 1 進行調整生成乙個最大堆。篩選就是從乙個結點a出發,先比較這個結點a的左右孩子b c,如果有比其大的結點,交換假設結點c大,那麼將a結點的值調整為c結點的值,接著以c為結點,繼續向下...

C 下ASCII碼轉字串

typedef vectorstrvector void ascii2string const char sz,strvector v1 val val 16 str 0x str v1.push back str p void output const char sz,strvector v1 f...

字串與ASCII碼互換

public static void main string args ascii碼怎麼轉為字元 public static void asctostring 就是將string字元型別資料轉換為integer整型資料 第一步把獲取到的ascii碼放入字串陣列內 第二步,integer.parsei...