C # строка байтов в массив байтов - PullRequest
9 голосов
/ 22 февраля 2011

У меня есть следующая строка байтов

17 80 41 00 01 00 01 00 08 00 44 61 72 65 46 61 74 65 01 00 00 00 01 00 03 00 01 00 09 00 43 6861 6E 6E 65 6C 2D 31 00 00 02 00 09 00 43 68 61 6E 6E 65 6C 2D 32 65 00 03 00 09 00 43 68 61 6E 6E 65 6C 2D 33 65 00

Что такоелучший способ принять это как ввод от пользователя и превратить его в байтовый массив?

Ответы [ 3 ]

13 голосов
/ 22 февраля 2011

Попробуйте:

string text = ...
byte[] bytes = text.Split()
                   .Select(t => byte.Parse(t, NumberStyles.AllowHexSpecifier))
                   .ToArray();

Если вы хотите разделить только пробел (а не пробел), используйте Split (' ').

8 голосов
/ 22 февраля 2011

Если пользователь просто вводит его в командную строку, сделайте это:

        string input = GetInput(); // this is where you get the input
        string[] numbs = input.Split(' ');
        byte[] array = new byte[numbs.Length];
        int i = 0;

        foreach (var numb in numbs)
        {
            array[i++] = byte.Parse(numb, NumberStyles.HexNumber);
        }
1 голос
/ 22 февраля 2011

Вы можете использовать метод Parse в System.Byte для анализа отдельных пар hax:

// Get the string from the user
string s=Console.ReadLine();

// Convert to a byte array
byte[] sBytes=s.Split(new char[] {' '})
               .Select(hexChar => byte.Parse(hexChar,NumberStyles.HexNumber))
               .ToArray();

// *** Test code follows ***

// Display the bytes (optional), to verify that the conversion worked
StringBuilder hexString=new StringBuilder(sBytes.Length*3);

foreach (byte b in sBytes)     
{
  // Separate hex pairs with a space
  if (hexString.Length>0)
    hexString.Append(' ');
  // Append next hex pair (i.e., formatted byte)
  hexString.AppendFormat("{0:x2}",b);
}

Console.WriteLine(hexString);
...