2012-05-16 173 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是所需的字節數組。現在用abc做你想做的事。

相關問題