LRazvan96 Ответов: 1

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


Привет,
Я хочу преобразовать тип данных в байтовый адрес.


+ И я должен избежать этого "0x" из моих данных.
И тип данных будет строковым(я думаю), но это может быть int или что-то еще.
Я не знаю, что писать в коде.
Спасибо!
Например:

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

public void blabla(строка 0xmyaddress)
{
/////// Мой адрес будет выглядеть так : 0x01020304
/////// И я хочу преобразовать этот адрес в:
байт [0]= 04;
байт [1]= 03;
байт [2]= 02;
byte [3]= 01; // Все в обратном порядке байтов, как я это сделал.

//И там будет мой код(я надеюсь)

}

1 Ответов

Рейтинг:
0

OriginalGriff

Это, возможно, сложнее, чем вы думаете: строка-это массив символов (или ее можно представить и рассматривать как таковую), но char в .NET это не эквивалентно байту, это значение Юникода и, таким образом, 16-битное значение, в отличие от байта, который является 8-битным значением.

Существуют способы его преобразования, но они зависят от "знания" того, каким должно быть исходное значение в строке. Если вы знаете, что строка содержит данные ASCII, например, потому что она была получена с устройства, которое работает в ASCII, то это просто:

string s = ...
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(s);

Но если вы не знаете Источник, то вы, вероятно, не знаете содержание, и преобразование склонно к ошибкам.

Следующая проблема заключается в том, что ваш пример не имеет большого смысла: он должен подразумевать одну из трех вещей:
1) Вы хотите преобразовать имя локальной переменной в массив байтов, что глупо и вряд ли будет надежным: имя не обязательно сохраняется при компиляции и может быть случайным набором букв вместо литерала "Ox01020304"
2) Вы пытаетесь преобразовать "адрес" строки в массив байтов. Это также сложнее, потому что строка не имеет прямого адреса: это ссылка на инвариантный элемент в кучной памяти, и GC может свободно перемещать фактический объект в памяти, если ему нужно прозрачно за кулисами. Чтобы использовать сам адрес, вы должны сначала "исправить" его положение, а это обычно не требуется.
3) Если содержимое Oxmyaddress представляет собой строку "0x01020304", то это довольно тривиально: используйте Convert.ToInt32, чтобы преобразовать его в целое число, а затем BitConverter, чтобы получить байты:
string s = "0x01020304";
int i = Convert.ToInt32(s, 16);
byte[] buffer = BitConverter.GetBytes(i);


Но я думаю, что вам нужно сначала обдумать, что именно вы делаете, немного более тщательно...