2010-05-27 3 views
4

У меня есть строка, такая как "0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF". Я хочу, чтобы преобразовать его в:Как преобразовать строку в байт [] из unsigned int 32 C#

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

Я думал о расщеплении строки по , затем петлю на него и SetValue в другой 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 при первом начале.

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

ответ

5

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

byte[] data = 
    Key 
    .Split(new string[]{", "}, StringSplitOptions.None) 
    .Select(s => Byte.Parse(s.Substring(2), NumberStyles.HexNumber)) 
    .ToArray(); 
3
keybyte[i] = byte.Parse(arr[i].Trim().Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); 
+0

все еще получаю ошибку типа «Входная строка не была правильной формат." в то время как это arr [i] \t «0x5D» \t строка в часах: S – Miroo

+0

вы правы - я ее отредактировал - arr [i] .Substring (2) –

+0

well thanx я использовал решение для ушей с lc решением, и это сработало. Урс пропустил часть подписки – Miroo

0

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

От MSDN Documentation:

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

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

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

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

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

+0

Работал как шарм, чем – Miroo

Смежные вопросы