有谁能告诉我为什么我会为‰符号获得不同的值? 我的Delphi7代码是 -
k := ord('‰'); //k is of type longint; receiving k as 137
我的C#代码是 -
k = (long)('‰');//k is of type long; receiving k as 8240
请给我一个解决方案,我怎样才能在C#中获得相同的价值?因为Delphi代码解决了我的目的。
答案 0 :(得分:7)
C#将文本编码为UTF-16。 Delphi 7将文本编码为ANSI。其中存在差异。你没有比较喜欢。
您询问如何获取该字符的ANSI序数值。使用new Encoding(codepage)
获取与您的Delphi ANSI编码匹配的Encoding
实例。您需要知道您正在使用哪个代码页才能执行此操作。然后在该编码实例上调用GetBytes
。
例如,如果您的代码页是1252,那么您可以写:
enc = new Encoding(1252);
byte[] bytes = enc.GetBytes("‰");
或者如果您想使用默认的系统ANSI编码,您可以使用
byte[] bytes = Encoding.Default.GetBytes("‰");
有人想知道你为什么问这个问题。这里回答了很多问题,我想知道你是否正在进行某种加密,散列或编码,并且正在使用一些使用AnsiString
变量作为字节数组的Delphi代码作为参考。在这种情况下,虽然Encoding.GetBytes
是您要求的,但它并不是您所需要的。你需要的是停止使用字符串来保存二进制数据。使用字节数组。在Delphi和C#中。