怎样让字符串按ASCII码排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样让字符串按ASCII码排序相关的知识,希望对你有一定的参考价值。

在你需要的地方调用如下过程,如:string newString = mysort(参数)

private string mysort(string str)

if(str.Length !=7)

MessageBox.Show("字符串长度不等于 7 !","错误");
return "";

string mystr = str.Substring(1, 5); //去首尾字符
char[] myCharArray = mystr.ToCharArray(); //转为字符数组
Array.Sort(myCharArray); //升序排序
Array.Reverse(myCharArray); //反转
string new_str = new String(myCharArray); //转为字符串
//加首尾字符
string ret_str = str.Substring(0, 1) + new_str + str.Substring(6, 1);
return ret_str; //返回

本回答由提
参考技术A ASCII码采用7位二进制比特编码,可以表示128个字符。最小的ASCII码是0000000(二进制),最大的是1111111(二进制)。

待签名参数按照字段名的ascii码从小到大排序 怎么理解

例如input_charset=GBK&partner=1900000109&total_fee=1

private String getSign(Map<String, String> params) 
   Map<String, String> sortMap = new TreeMap<String, String>();
   sortMap.putAll(params);
   // 以k1=v1&k2=v2...方式拼接参数
   StringBuilder builder = new StringBuilder();
   for (Map.Entry<String, String> s : sortMap.entrySet()) 
       String k = s.getKey();
       String v = s.getValue();
       if (StringUtils.isBlank(v)) // 过滤空值
           continue;
       
       builder.append(k).append("=").append(v).append("&");
   
   if (!sortMap.isEmpty()) 
       builder.deleteCharAt(builder.length() - 1);
   
   return Md5Util.md5Encode(builder.toString()).toUpperCase();

将所有参数放入treeMap中(默认升序),然后循环拼接后md5加密后即可。

参考技术A 3个参数分别是input_charset,partner,total_fee,按照ascii码排序,(这里可以理解为按照字母排序)首字母分别是,i,p,t.追问

如果按照你的理解,你的排序刚刚相反,应该是input_charset《partner《total_fee

追答

没有错啊,字母a-z在ASCII中排序是从小到大。
给你一份ASCII码表,按照字母所对应的数字排序。
http://moodle.hsshn.pudong-edu.sh.cn/file.php/99/resource/ASCII.htm

追问

我是aspx网站的初学者,能不能就此问题,给我写一个简单的程序 谢谢了 还有一点要说明的是,里面的字段名称是不固定的,可能不止这几个,需要程序灵活的判定然后排序

追答

我ASP不熟,C也是略知一二。建议你去ASP区问下。在其它语言里

参考技术B input_charset=GBK
partner=1900000109
total_fee=1

看input_charset partner total_fee 字符串 排列他们的顺序
input_charset>partner>total_fee

所以这个就已经是排好了追问

怎么比较出来的,用.net程序如何做?
而且,这个不应该是首字母的排序,这个问题是由财付通接口中提取出来的,一下是他们的原说法:
无论是用get、post还是xml,签名原始串组串方式都一致,除sign字段外,待签名参数按照字段名的ascii码从小到大排序后使用QueryString的格式(即key1=value1&key2=value2…)拼接而成,空值不传递,不参与签名。

追答

写错了抱歉
input_charset<partner<total_fee
c语言 strcmp("input_charset") < input_charset("partner")

例如total_fee=1&partner=1900000109&input_charset=GBK

追问

我是aspx网站的初学者,能不能就此问题,给我写一个简单的程序 谢谢了 还有一点要说明的是,里面的字段名称是不固定的,可能不止这几个,需要程序灵活的判定然后排序

参考技术C input_charset=GBK
partner=1900000109
total_fee=1
inpt_charset>partner>total_fee
input_charset<partner<total_fee
参考技术D aaa

以上是关于怎样让字符串按ASCII码排序的主要内容,如果未能解决你的问题,请参考以下文章

按照ASCII码升序排序问题,我哪里不对呀?

js对一个字符串根据ASCII码从小到大排序(字典序)

待签名参数按照字段名的ascii码从小到大排序 怎么理解

参数签名ascii码排序的坑

c中如何输出一个字符的ASCII码

待签名参数按照字段名的ascii码从小到大排序 怎么理解