https://www.cnblogs.com/similar/p/6739293.html

在和银行做数据对接时,涉及到数据传输时的验签及加密。其中数据签名方案中就要求数据项根据属性名按 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码 排序,注意其中的小坑的更多相关文章

  1. C# 参数签名字符串按 ASCII码排序,注意其中的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  2. 字符串ASCII码排序

    在对接第三方支付渠道的时候,第三方会要求参数按照ASCII码从小到大排序. 如下是渠道方有关生成签名规则的java代码示例: //初始化0010merkey.private文件: String mer ...

  3. ASCII码排序

    ASCII码排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一行输 ...

  4. ASCII码排序 南阳acm4

    ASCII码排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一行输 ...

  5. NYOJ4——ASCII码排序

    ASCII码排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:2  描述:输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.  输入:第一行输入一 ...

  6. [PHP] chr和ord函数实现字符串和ASCII码互转

    chr和ord函数是用来字符串和ASCII码互转的.  ASCII码是计算机所能显示字符的编码,它的取值范围是0-255,其中包括标点.字母.数字.汉字等.在编程过程中,经常把指定的字符转化为ASCI ...

  7. 杭电2000——ASCII码排序

    /* ASCII码排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  8. 2000 ASCII码排序

    声明:从今天开始每周至少做七道杭电ACM题,锻炼思考能力. 2000  ASCII码排序 Problem Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. ...

  9. 【hdu2000】ASCII码排序

    题目来源:www.acm.hdu.edu.cn 题目编号:2000 ASCII码排序 /*----------------------------------------原题目------------ ...

随机推荐

  1. python3 re模块

    一.常用正则表达式符号和语法: '.' 匹配所有字符串,除\n以外 ‘-’ 表示范围[0-9] '*' 匹配前面的子表达式零次或多次.要匹配 * 字符,请使用 \*. '+' 匹配前面的子表达式一次或 ...

  2. keepalived.conf配置说明

    vim /etc/keepalived/keepalived.conf配置信息如下! Configuration File for keepalived global_defs { notificat ...

  3. js 父类选择前后差异

    $(this).parent().prev().text(""); $(this).parent().text(""); 如果这俩个顺序调换则再使用prev() ...

  4. Devexpress gridview cell增加控件

    1.根据上图次序,先添加三类控件类型: 2.根据上图次序设置columnEdit 3.点开ColumnEdit , 设置 check 和 uncheck的 value

  5. FPGA Asynchronous FIFO设计思路(2)

    FPGA Asynchronous FIFO设计思路(2) 首先讨论格雷码的编码方式: 先看4bit的格雷码,当MSB为0时,正向计数,当MSB为1时,即指针已经走过一遍了,最高位翻转,此时的格雷码是 ...

  6. FPGA Asynchronous FIFO设计思路

    FPGA Asynchronous FIFO设计思路 将一个多位宽,且在不停变化的数据从一个时钟域传递到另一个时钟域是比较困难的. 同步FIFO的指针比较好确定,当FIFO counter达到上限值时 ...

  7. 如何让Enum枚举实现异或操作

    var flag = Week.Monday; flag = flag | Week.Wednesday; if ((flag & Week.Monday) == Week.Monday ) ...

  8. C++ 重定义、重载、覆盖

    想要用好C++继承和类自身函数实现就必须了解C++得三个概念重定义(redefine).重载(overload).重写(override). 一 基本感念 1 重定义(redefine) 派生类对基类 ...

  9. pandas模块实现小爬虫功能-转载

    pandas模块实现小爬虫功能 安装 pip3 install pandas 爬虫代码 import pandas as pd df = pd.read_html("http://www.a ...

  10. Linux基础上

    文件操作                                                                                                 ...