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

Pra*_*kla 1 c# delphi delphi-7

任何人都可以告诉我为什么我得到‰符号的不同值?我的Delphi7代码是 -

k := ord('‰'); //k is of type longint; receiving k as 137
Run Code Online (Sandbox Code Playgroud)

我的C#代码是 -

k = (long)('‰');//k is of type long; receiving k as 8240
Run Code Online (Sandbox Code Playgroud)

请给我一个解决方案,我怎样才能在C#中获得相同的价值?因为Delphi代码解决了我的目的.

Dav*_*nan 7

C#将文本编码为UTF-16.Delphi 7将文本编码为ANSI.差别就在于此.你不是喜欢比较喜欢.

您询问如何获取该字符的ANSI序数值.使用new Encoding(codepage)得到一个Encoding符合你的Delphi ANSI编码实例.您需要知道您正在使用哪个代码页才能执行此操作.然后调用GetBytes该编码实例.

例如,如果您的代码页是1252,那么您可以写:

enc = new Encoding(1252);
byte[] bytes = enc.GetBytes("‰");
Run Code Online (Sandbox Code Playgroud)

或者,如果要使用默认的系统ANSI编码,则可以使用

byte[] bytes = Encoding.Default.GetBytes("‰");
Run Code Online (Sandbox Code Playgroud)

有人想知道你为什么问这个问题.这里回答了很多问题,我想知道你是否正在进行某种加密,散列或编码,并且正在使用一些使用AnsiString变量作为字节数组的Delphi代码作为参考.在这种情况下,虽然Encoding.GetBytes是你要求的,但这不是你需要的.你需要的是停止使用字符串来保存二进制数据.使用字节数组.在Delphi和C#中.

  • byte [] bytes = Encoding.Default.GetBytes("‰"); 为我工作.谢谢. (2认同)