private static unsafe void PrintNumbers(string str) {
fixed(char* pStr = str) {
for(int i = 0; i < str.Length; ++i)
Console.WriteLine((int)pStr);
}
}
C# строка как массив чисел
Как преобразовать C# string в массив целых чисел?
И может ли такая строка содержать нулевые символы?
На деле же строка в .NET являет собой неизменяемый массив двухбайтовых Unicode-символов.
Чем-нибудь типа конструктора String(SByte*, Int32, Int32);
А потом обратно всё это разобрать на числа.
Краегольный камень во всем этом деле именно использование строкового типа.
Вот хочу понять, можно ли такое провернуть, или неверное использовать string в таких задачах.
Цитата: Absolut
Ну, скажем, я изначально имею массив 8/16/32-битных целых и хочу сформировать из него строку в терминологии C# string.
Для чего?
Цитата: Absolut
Чем-нибудь типа конструктора String(SByte*, Int32, Int32);
А потом обратно всё это разобрать на числа.
А потом обратно всё это разобрать на числа.
Конструкторы System.String.
Помимо них можно использовать различные члены класса Encoding.
Цитата: Absolut
Вот хочу понять, можно ли такое провернуть, или неверное использовать string в таких задачах.
В каких задачах?
Цитата: Absolut
С шарпами знаком мало, поэтому может быть вопрос будет дилетантский.
Как преобразовать C# string в массив целых чисел?
Как преобразовать C# string в массив целых чисел?
В конце концов никто не мешает использовать unsafe-код:
Код:
Цитата: Absolut
И может ли такая строка содержать нулевые символы?
Может. Длина строки в .NET хранится отдельно (в примере по адресу: (int*)pStr - 1).
Цитата: hardcase
Для чего?
Для взаимодействия с другим софтом, который может принять/отдать строку.
Явных массивов там нет.
Цитата: hardcase
Понятие кодировки в данном случае не совсем приемлемо. Т.к. у меня не строка ТЕКСТА, а набор чисел.
Цитата: hardcase
В каких задачах?
Представления строки C# как массива чисел.
Цитата: Absolut
Для взаимодействия с другим софтом, который может принять/отдать строку.
Явных массивов там нет.
Явных массивов там нет.
Разве PInvoke не справляется с задачей?
Цитата: Absolut
Представления строки C# как массива чисел.
Это невозможно. Строка символов это строка символов. Максимум что возможно - это получить базовый адрес строки (см. пример выше) и оперировать им.