谁能告诉我为什么 ‰ 符号会得到不同的值? 我的 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 代码解决了我的目的。
最佳答案
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# 中。
关于C# vs Delphi-两种代码都为 ‰ 提供了不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29649159/