C#vs Delphi-两个代码给出了不同的值‰

时间:2015-04-15 11:35:32

标签: c# delphi delphi-7

有谁能告诉我为什么我会为‰符号获得不同的值? 我的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代码解决了我的目的。

1 个答案:

答案 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#中。