Как я могу преобразовать строку в байт [] без знака Int 32 C # - PullRequest
4 голосов
/ 27 мая 2010

У меня есть строка типа "0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF". Я хочу преобразовать это в:

byte[] key= new byte[] { 0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF};

Я думал о разбиении строки на ,, затем зацикливание на ней и задание значения в другое byte[] в индексе i

string Key = "0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF";

    string[] arr = Key.Split(',');
    byte[] keybyte= new byte[8];
    for (int i = 0; i < arr.Length; i++)
    {
         keybyte.SetValue(Int32.Parse(arr[i].ToString()), i);
    }

но похоже, что это не работает. Я получаю сообщение об ошибке при преобразовании строки в unsigned int32 в первом начале.

любая помощь будет оценена

Ответы [ 3 ]

5 голосов
/ 27 мая 2010

Вы можете сделать так:

byte[] data =
  Key
  .Split(new string[]{", "}, StringSplitOptions.None)
  .Select(s => Byte.Parse(s.Substring(2), NumberStyles.HexNumber))
  .ToArray();
3 голосов
/ 27 мая 2010
keybyte[i] = byte.Parse(arr[i].Trim().Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
0 голосов
/ 27 мая 2010

Вы должны явно указать AllowHexSpecifier (или HexNumber - подробности см. В документации ниже). Кроме того, шестнадцатеричные строки, передаваемые в Parse, не могут иметь префикс 0x, поэтому вам придется сначала их удалить.

С Документация MSDN :

Указывает, что числовая строка представляет шестнадцатеричное значение. Допустимые шестнадцатеричные значения включают числовые цифры 0-9 и шестнадцатеричные цифры A-F и a-f. Шестнадцатеричные значения могут дополняться нулями слева. Строки, проанализированные с использованием этого стиля, не могут иметь префикс «0x».

Так что попробуйте:

Int32.Parse(arr[i].Substring(2), 
    System.Globalization.NumberStyles.AllowHexSpecifier)

Кроме того, вы упомянули использование целого числа без знака. Вы хотели использовать UInt32 вместо этого?

Кроме того, не уверен, почему вы звоните на дополнительный номер ToString на string ...

...