2012-05-16 4 views
0

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

Вопрос в том, как я могу преобразовать массив строк, созданный в массив байтов с одинаковыми значениями?

так что это будет ввести в текстовое поле:

0x11, 0x01, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0x75, 0x6D, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 

следующий код затем раскалывает его и преобразует его в массив байтов

string text = txtChecksumText.Text; 
     string[] parts = text.Split(new string[] { ", " }, StringSplitOptions.None); 
     byte[] bytes = new byte[parts.Length]; 

     for (int i = 0; i < parts.Length; i++) 
     { 
      bytes[i] = Convert.ToByte(parts[i], 16); // this isn't working as expected 
      txtResponse.Text += Environment.NewLine + "  " + i + " = " + parts[i] + " = " + bytes[i].ToString() ; 
     } 

и ответ, чтобы показать, что это не рабочий

0 = 0x11 = 17 
1 = 0x01 = 1 
2 = 0x49 = 73 
3 = 0x4D = 77 
4 = 0x41 = 65 
5 = 0x47 = 71 
6 = 0x45 = 69 
7 = 0x31 = 49 
8 = 0x00 = 0 
9 = 0x00 = 0 
10 = 0x00 = 0 
11 = 0x00 = 0 
12 = 0x00 = 0 
13 = 0x00 = 0 
14 = 0x00 = 0 
15 = 0x00 = 0 
16 = 0x00 = 0 
17 = 0x00 = 0 
18 = 0x00 = 0 
19 = 0x00 = 0 
20 = 0x00 = 0 
21 = 0x00 = 0 
22 = 0x00 = 0 
23 = 0x01 = 1 
24 = 0x53 = 83 
25 = 0x75 = 117 
26 = 0x6D = 109 
27 = 0x6D = 109 
28 = 0x61 = 97 
29 = 0x72 = 114 
30 = 0x79 = 121 
31 = 0x00 = 0 
32 = 0x00 = 0 
33 = 0x00 = 0 
34 = 0x00 = 0 
35 = 0x00 = 0 
36 = 0x00 = 0 
37 = 0x00 = 0 
38 = 0x00 = 0 
39 = 0x00 = 0 
40 = 0x00 = 0 
41 = 0x00 = 0 
42 = 0x00 = 0 
43 = 0x00 = 0 
44 = 0x00 = 0 
45 = 0x00 = 0 
46 = 0x00 = 0 
47 = 0x00 = 0 
48 = 0x00 = 0 
49 = 0x00 = 0 
50 = 0x00 = 0 
51 = 0x00 = 0 
52 = 0x00 = 0 
53 = 0x00 = 0 
54 = 0x00 = 0 
55 = 0x00 = 0 

Для того чтобы быть ясным, 0x11 должен возвращаться как байт 11, а не байт 1 7, то же самое со всеми остальными, которые я не пытаюсь преобразовать в десятичную, я пытаюсь преобразовать строку литеральных байтов в массив байтов для создания контрольной суммы

+0

Извините за вопрос, но что не работает? Насколько я понимаю, он работает нормально. –

+0

Является ли проблема, что, например, 0x45 преобразуется в 69? Это потому, что 0x45 (45 шестнадцатеричных на самом деле 69 в десятичной форме) –

+0

0x11 должен возвращаться как байт 11 не байт 17, то же самое со всеми остальными, которые я не пытаюсь преобразовать в десятичную, я пытаюсь преобразовать строку литеральных байтов в массив байтов для создания контрольной суммы – Neo

ответ

2

Байт, который вы получаете, это просто байты; они не являются внутренне десятичными или шестнадцатеричными.

Если вы хотите передать байты на что-то еще (для контрольной суммы), они в порядке.

Ваша единственная проблема заключается в том, что вы пишете их на консоль в десятичной форме - используйте ToString("x"), если вы хотите записать их в шестнадцатеричной форме по любой причине.

0

Ваш код работает. Chesk это, чтобы наблюдать различные преобразования и выбирать все, что вам нужно:

MessageBox.Show(11.ToString()); 
MessageBox.Show(11.ToString("x")); 
MessageBox.Show(0x11.ToString()); 
MessageBox.Show(0x11.ToString("x")); 
MessageBox.Show(BitConverter.ToString(new byte[] { 11, 0x11, 16 })); 
1

Пожалуйста, сделайте следующее:

txtHexString.Text="0x11, 0x01, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0x75, 0x6D, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00"; 

string[] namesArray = txtHexString.Text.Split(','); 
byte[] abc= new byte [namesArray.Length]; 

for (int i = 0; i <= namesArray.Length - 1; i = i + 1) 
     { 
      abc[i] = Convert.ToByte(namesArray[i].Replace(" ", ""), 16); 
     } 

здесь, а является искомым массива байт. Теперь сделайте все, что захотите, с помощью abc.

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