Разбить строку на ASCII-числа

#c# #ascii

#c# #ascii

Вопрос:

Я пытаюсь найти способ взять строку и сохранить ее в виде массива ее значений ASCII в виде целых чисел

ie; строка 1 = привет
массив 72,69 и т. д

Комментарии:

1. Почему? Строка уже является массивом символов.

2. Что, если строка содержит символы, которые не являются частью набора символов ASCII?

3. @Хенк Холтерман: Нет, это две разные вещи. Для начала: строка является неизменяемой, тогда как массив символов — нет.

4. @MartinStettner класс string внутренне поддерживает массив символов.

5. @Magnus Да, но, тем не менее, это разные вещи с точки зрения языка. Например, «внутренний» массив может совместно использоваться разными String экземплярами, что, кстати, связано с тем, что String они неизменяемы. Если бы они были «одним и тем же», вам бы не понадобился класс string…

Ответ №1:

 var arr = Encoding.ASCII.GetBytes("Hello");
  

Комментарии:

1. Помните о преобразованиях, которые здесь происходят, когда ваша входная строка не является чистым ASCII.

2. var Вид скрывает, что результатом является byte[]

3. Что ж, функция вызвана GetBytes

Ответ №2:

Чтобы немного расширить комментарий Хенка, строка уже представляет собой массив 16-разрядных целых чисел (shorts), представляющих кодовую точку каждого символа в Юникоде (но смотрите ниже). Если ваша строка полностью состоит из «ASCII» (кодовые точки ниже 128), то выполнение приведенного ниже кода приведет к тому, что вы ожидаете:

 string s = "hello";
foreach (char c in s)
{
    Console.WriteLine((short)c);
}
  

104
101
108
108
111

Используйте s.ToCharArray() для извлечения этого массива и делайте с ним, что хотите. Обратите внимание, что строки могут содержать любой символ Юникода, и ваша программа должна понимать это (включая случай, когда для представления одного символа требуется более одного короткого).

Комментарии:

1. Как я мог бы использовать это для упорядочивания набора строк в алфавитном порядке

2. Если вам нужно упорядочить коллекцию строк. myList.OrderBy(s => s);

Ответ №3:

Вы настаиваете на кодировке ASCII (как насчет всех других возможных символов)?. Если нет, то есть если вам нужен массив символов Unicode, я бы предложил использовать

 myString.ToCharArray();
  

или

 myString.ToCharArray().Cast<int>().ToArray();
  

(последнее, если вам нужны int значения)