C# vs Delphi-两种代码都为 ‰ 提供了不同的值

标签 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 代码解决了我的目的。

最佳答案

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/

相关文章:

delphi - 如何使两个控件各自占据其父级区域的一半?

Delphi:设计模式下为 "Resource not found"- 为什么?

Delphi 2010-IDE 不断停止在 CPU 调试窗口

delphi - 自动允许 Ctrl+A 选择 TMemo 中的所有内容?

delphi - 有没有办法从字符串中只获取 ANSI 字符?当字符串包含表情符号时 Utf8 解码失败

c# - 无法弄清楚如何检查列表是否包含 0

c# - 如果在单独的方法中调用,为什么 Parallel.Invoke 会快得多?

c# WPF 更改 CheckBox 的复选颜色

c# - 我可以使用标准委托(delegate)而不是谓词吗?

delphi - 如何在 ListView 中省略空单元格的网格线?