为了调试我的代码中的问题,我已经声明了以下两个字符串,假设它们是等价的:
String print = "8A9B485ECDC56B6E0FD023D6994A57EEC49B0717";
String newPrint = thumbprint.Trim().Replace(" ", "").ToUpper();
Run Code Online (Sandbox Code Playgroud)
我发现他们不是.太好了,这是我的问题的根源.但是,我正在检查即时窗口中的内容(在声明后面的行)并且不明白发生了什么.这是输出:
print
"8A9B485ECDC56B6E0FD023D6994A57EEC49B0717"
newPrint
"?8A9B485ECDC56B6E0FD023D6994A57EEC49B0717"
String.Compare(print, newPrint);
0
print == newPrint
false
print.Equals(newPrint)
false
Run Code Online (Sandbox Code Playgroud)
是吧?为什么他们不平等?
编辑:
我需要用'thumbprint'作为基础.这是用户输入的字符串.我只是使用'newPrint'作为临时变量来保存修剪/上升值.打印是预期的结果.
Dan*_*rth 28
实际上,它们并不等同.我复制了两个值,newPrint长度为41,而print长度为40.第一个字符newPrint是ASCII值为14.有趣的是,这已经从您的直接窗口转移到SO到我的LINQPad.
print.Length
40
newPrint.Length
41
(sbyte)print[0]
56
(sbyte)newPrint[0]
14
Run Code Online (Sandbox Code Playgroud)
这实际上与你Trim和你的Replace电话无关,但事实上你使用的是thumbprint而不是print作为基础.我只能假设thumbprint包含那个额外的角色.它来自哪里我不知道.如果您要更改第二行print而不是thumbprint您将获得您期望的结果.
Tig*_*ran 18
您发布的字符串不相等.这样做:
string val = "8A9B485ECDC56B6E0FD023D6994A57EEC49B0717";
string val1 = "?8A9B485ECDC56B6E0FD023D6994A57EEC49B0717";
var bt = System.Text.Encoding.UTF8.GetBytes(val);
var bt_1 = System.Text.Encoding.UTF8.GetBytes(val1);
Run Code Online (Sandbox Code Playgroud)
您将看到第二个数组在开始时包含更多元素.
226
128
142
Run Code Online (Sandbox Code Playgroud)
在这3个元素内容相等之后.
原因String.Compare是:
比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |