2012-02-16 2 views
1

Моя строка содержит байты (например, 0x27), в основном то, что мне нужно сделать, это преобразовать этот строковый массив, который содержит данные байта, в тип данных byte, поэтому я могу кодировать его в UTF8 , поэтому он отображает значимую информацию.C# Convert String СОДЕРЖАНИЕ массиву байтов

1 строка массив содержит:

0x37, 0x32, 0x2d, 0x38, 0x33, 0x39, 0x37, 0x32,0x2d, 0x30, 0x31

мне нужно, что преобразованные в массив байтов , это возможно?

Мой код:

 string strData; 
     string strRaw; 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.InnerXml = Data; 
     XmlElement xmlDocElement = xmlDoc.DocumentElement; 

     strData = xmlDocElement.GetAttribute("datalabel").ToString(); 
     strRaw = xmlDocElement.GetAttribute("rawdata").ToString(); 

     string[] arrData = strData.Split(' '); 
     string[] arrRaw = strRaw.Split(' '); 

Спасибо за любую помощь.

+1

Вы имеете в виду, что строка содержит текст типа «0x23» или символы в строке имеют значение 23 hex и т. Д.? –

+0

Текст равен 0x23, так что, например, строка str = "0x23" –

ответ

6

Говорить, что строка «строка содержит байты» может быть интерпретирована несколькими способами. Вы можете извлечь строку в байтах несколькими способами. Преобразование строки непосредственно в байты, основанных на кодировке UTF8:

var inputBytes = System.Text.Encoding.UTF8.GetBytes(input); 

Есть, конечно, подобные методы для других кодировок.

Игнорируйте выше

Ваш комментарий изменяет способ вопрос читает совсем немного! Если ваши строки являются шестым (т.е. байты не кодируются в строку), просто конвертируйте их из шестнадцатеричных чисел в целые числа. Что-то вроде ....

var b = Convert.ToUInt32(str.Substring(2), 16) 

// For an array 
var bytes = new byte[arrData.Length]; 
for(var i = 0; i < arrData.Length; i++) { 
    bytes[i] = (byte)Convert.ToUInt32(arrData[i].Substring(2), 16); 
} 
+0

Проблема, которая у меня есть, байты хранятся в массиве, а GetBytes не принимает строковый массив. –

+0

Извините, я неправильно понял вопрос - ваш комментарий - str = "0x23" полностью изменил это. Все, что вы хотите сделать, это проанализировать эти строки как шестнадцатеричные. var b = Convert.ToUInt32 (str.Substring (2), 16) –

+0

Итак, как бы я мог сделать это с помощью массива строк? –

0

Вы должны быть в состоянии сделать следующее:

System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding(); 
byte[] bytes = encoding.GetBytes(str); 
1

Если у вас есть каждый байт в полукокса и просто хочу, чтобы преобразовать его в массив байтов без использования кодирование, использование;

string blip = "\x4A\x62"; 
byte[] blop = (from ch in blip select (byte)ch).ToArray(); 

Если вы хотите, чтобы преобразовать его в кодировке UTF8 сразу, используйте

string blip = "\x4A\x62"; 
var blop = System.Text.Encoding.UTF8.GetBytes(blip); 
1

дается ваша строка является «0x37, 0x32, 0x2d, 0x38, 0x33, 0x39, 0x37, 0x32,0x2d, 0x30, 0x31 "или аналогично, вы можете получить значения байта, подобные этому;

string input = "0x37, 0x32, 0x2d, 0x38, 0x33, 0x39, 0x37, 0x32, 0x2d, 0x30, 0x31"; 

string[] bytes = input.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries); 

byte[] values = new byte[bytes.Length]; 
for (int i = 0; i < bytes.Length; i++) 
{ 
    values[i] = byte.Parse(bytes[i].Substring(2,2), System.Globalization.NumberStyles.AllowHexSpecifier); 
    Console.WriteLine(string.Format("{0}", values[i])); 
} 

, как только вы их нужно кормить их в apropriate кодер/декодер, чтобы получить строку.