欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 字符串按 ASCII码 排序的方法

程序员文章站 2023-01-07 11:58:35
在和银行做数据对接时,涉及到数据传输时的验签及加密。其中数据签名方案中就要求数据项根据属性名按 ascii码 进行升序排序。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排序

注:掉入这个坑是因为起初不知道如何对字符做ascii码排序,于是百度了一把。得到的结果就是这个c# 参数按照ascii码从小到大排序(字典序)  而当我采用这种方式时,银行验签那步始终通不过,调试发现我排序后的结果和银行那边的不同。

以上所述是小编给大家介绍的c# 字符串按 ascii码 排序的方法,希望对大家有所帮助