C # против Delphi - оба кода дают разные значения для ‰

1

Может ли кто-нибудь сказать мне, почему я получаю разные значения для символа ‰? Мой код Delphi7 is-

k := ord('‰'); //k is of type longint; receiving k as 137

Мой код С# is-

k = (long)('‰');//k is of type long; receiving k as 8240

Пожалуйста, дайте мне решение, как я могу получить такое же значение в С#? Потому что код Delphi решает мою цель.

  • 1
    Я вернул твой вопрос редактировать. Пожалуйста, давайте сосредоточимся на этом вопросе, прежде чем перейти к другому вопросу.
Теги:
delphi-7

1 ответ

7
Лучший ответ

С# кодирует текст как UTF-16. Delphi 7 кодирует текст как ANSI. В этом и заключается разница. Вы не сравнитесь с подобными.

Вы спрашиваете, как получить порядковое значение ANSI для этого символа. Используйте new Encoding(codepage) чтобы получить экземпляр Encoding, соответствующий вашей кодировке ANSI Delphi. Вам нужно знать, какую кодовую страницу вы используете, чтобы это сделать. Затем вызовите GetBytes на этот экземпляр кодировки.

Например, если ваша кодовая страница 1252, то вы должны написать:

enc = new Encoding(1252);
byte[] bytes = enc.GetBytes("‰");

Или, если вы хотите использовать кодировку ANSI по умолчанию, вы использовали бы

byte[] bytes = Encoding.Default.GetBytes("‰");

Вы задаетесь вопросом, почему вы задаете этот вопрос. Ответили на многие вопросы здесь, мне интересно, выполняете ли вы какое-то шифрование, хеширование или кодирование и используете в качестве ссылки некоторый код Delphi, который использует переменные AnsiString качестве массивов байтов. В этом случае, в то время как Encoding.GetBytes - это то, что вы просили, это не то, что вам нужно. Вам нужно прекратить использование строк для хранения двоичных данных. Используйте байтовые массивы. В Delphi и С#.

  • 0
    Да, я имел в виду (долго) "‰"
  • 0
    Как узнать значение кодовой страницы, поскольку код Delphi написан третьей стороной?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню