C # Преобразование строкового содержимого в байтовый массив - PullRequest
1 голос
/ 16 февраля 2012

Моя строка содержит байты (например, 0x27), в основном мне нужно преобразовать массив строк, который содержит байтовые данные, в тип данных byte, чтобы я мог кодировать его в UTF8, поэтому отображает значимую информацию.

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(' ');

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

Ответы [ 4 ]

6 голосов
/ 16 февраля 2012

Сказать, что «строка содержит байты» можно интерпретировать несколькими способами. Вы можете извлечь строку в байты несколькими способами. Преобразование строки непосредственно в байты на основе кодировки 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);
}
1 голос
/ 17 февраля 2012

при условии, что ваша строка равна "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]));
}

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

1 голос
/ 16 февраля 2012

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

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);
0 голосов
/ 16 февраля 2012

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

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