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);
Но я думаю, что вам нужно сначала обдумать, что именно вы делаете, немного более тщательно...