Todiruta Costel Nicusor Ответов: 3

Как преобразовать строку в массив символов?


Привет,

У меня есть такая струна
\x00\x00\x00\x00\x00\x00\x00\x00
и я хочу изменить его в массиве символов, например: 00 00 00 00 00 00 00;

Как я могу сделать это так?

Спасибо.

Что я уже пробовал:

Я уже пробовал функцию разделения, но она не сработала.
Может быть, я неправильно его использовал.

3 Ответов

Рейтинг:
7

OriginalGriff

Это будет зависеть от того, что именно представляет собой ваша строка - и есть две возможности
Вот один:

string inp = @"\x00\x00\x00\x00\x00\x00\x00\x00";

А вот и другая:
string inp = "\x00\x00\x00\x00\x00\x00\x00\x00";

То, как вы должны обращаться с ними, отличается.
Первый довольно тривиален:
string inp = @"\x00\x00\x00\x00\x00\x00\x00\x00";
string[] values = inp.Split(new string[] { "\\x" }, StringSplitOptions.RemoveEmptyEntries);
char[] data = new char[values.Length];
int i = 0;
foreach (string s in values)
    {
    data[i++] = (char)Convert.ToByte(s, 16);
    }
Второй еще более тривиален: строка - это массив символов, эффективно в том смысле, что вы можете получить доступ к отдельным символам через индекс, но:
string inp = "\x00\x00\x00\x00\x00\x00\x00\x00";
char[] data = inp.ToArray();


Рейтинг:
22

CPallini

Вы имеете в виду

string s = @"\x00\x00\x00\x00\x00\x00\x00\x00";
string[] a = s.Split(new string []{@"\x"},StringSplitOptions.RemoveEmptyEntries);
char[] ca = new char[a.Length];
for (int k = 0; k < a.Length; ++k)
  ca[k] = System.Convert.ToChar(System.Convert.ToUInt32(a[k], 16));
?


Рейтинг:
17

Jochen Arndt

Это строка исходного файла C, указывающая шестнадцатеричные коды для символов.

Если у вас действительно есть такая строка (то есть коды символов 0x5C 0x78 0x30 0x30), вы можете удалить "\x" из строки и преобразовать полученную строку в массив байтов. Это может быть преобразовано в массив символов (но это может быть и не обязательно в зависимости от того, что вы хотите с ним сделать).

Чтобы удалить "\x", вы можете использовать

String.Replace(@"\x", "");
или
String.Replace("\\x", "");

Существует множество примеров преобразования результирующей строки в массив байтов. Просто поищите в сети что-нибудь вроде " C# hex string to byte array":
c# - как я могу преобразовать шестнадцатеричную строку в массив байтов? - переполнение стека[^]