在和银行做数据对接时,涉及到数据传输时的验签及加密。其中数据签名方案中就要求数据项根据属性名按 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码 排序的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持!
您可能感兴趣的文章:二叉排序树的实现与基本操作详解Java二叉排序树C语言二叉排序(搜索)树实例C#代码实现扑克牌排序的几种方式C#实现的二维数组排序算法示例C# ListView 点击表头对数据进行排序功能的实现代码C# 参数按照ASCII码从小到大排序(字典序)C#七大经典排序算法系列(上)C#实现冒泡排序算法的代码示例C#中哈希表(HashTable)用法实例详解(添加/移除/判断/遍历/排序等)逐步讲解快速排序算法及C#版的实现示例C#使用IComparer自定义List类实现排序的方法C#实现二叉排序树代码实例