Halcon视觉之家-Halcon视觉技术论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 1619|回复: 1

[资料] C#中string.Compare原理,如何比较大小

[复制链接]

签到天数: 12 天

连续签到: 3 天

[LV.3]偶尔看看II

231

主题

1062

帖子

6834

积分

Rank: 9

积分
6834

热心会员突出贡献切换助手验证会员最佳新人

发表于 2020-7-9 18:02:49 | 显示全部楼层 |阅读模式

51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

您需要 登录 才可以下载或查看,没有账号?会员注册

x
  1. int n = string.Compare("a", "A");
  2. Console.WriteLine(n);
复制代码

我们可以看到n是等于-1的也就是a小于A,但是直观上感觉a应该是A大的,毕竟转换成16进制是0x61肯定比0x41大。
参数说明如下:
  1. //
  2.         // 摘要:
  3.         //     比较两个指定的 System.String 对象,并返回一个指示二者在排序顺序中的相对位置的整数。
  4.         //
  5.         // 参数:
  6.         //   strA:
  7.         //     要比较的第一个字符串。
  8.         //
  9.         //   strB:
  10.         //     要比较的第二个字符串。
  11.         //
  12.         // 返回结果:
  13.         //     一个 32 位带符号整数,指示两个比较数之间的词法关系。值Condition小于零strA 小于 strB。零strA 等于 strB。大于零strA 大于
复制代码

也就是说,如果前面的字符串小于后面字符串就是-1,相等就是0,大于就是1,那么这个比较基准是怎么比较的呢?

一直以为基于ASCII,但是后面想想应该是基于UNICODE的编码顺序,毕竟字符串范围不仅限于ASCII,但是这里却不是简单的UNICODE顺序,而且基于一套排序算法。
大家可以在此下载排序权重表(Sorting Weight Tables):
https://www.microsoft.com/en-us/download/details.aspx?id=10921
我是win10 2004,所以下载win10版本的,对应文件名为:Windows 10 Sorting Weight Table.txt
然后我们打开该txt找到我们的字符串“a”和“A”对应的十六进制编码,看看他们的权重:
微信截图_20200709180105.png
由此可以看到,虽然十六进制a比A大,但是a的权重却低于A,所以返回-1。


签到天数: 11 天

连续签到: 4 天

[LV.3]偶尔看看II

0

主题

38

帖子

577

积分

Rank: 3

积分
577

切换助手验证会员

发表于 2020-7-10 08:57:04 | 显示全部楼层
学习了,谢谢楼主
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

视觉培训招生

建议您使用Chrome、Firefox、Edge、360、IE10以上等主流浏览器浏览本论坛

算子查询| 申请友链| 小黑屋| 手机版| Archiver| 业务支持|

© 2015-2021 Halcon视觉之家  X3.4  粤ICP备15095995号 粤公网安备44030602000670号

本站已安全运行:

快速回复 返回顶部 返回列表