Может ли кто-нибудь сказать мне, почему я получаю разные значения для символа ‰? Мой код 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 решает мою цель.
С# кодирует текст как 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 и С#.