[英]convert string array of byte values to a byte array
我在表單上有一個文本框,其中一個人以下面顯示的格式輸入字節數組。
我的問題是如何將生成的字符串數組轉換為相同值的字節數組?
因此這將被輸入到文本框中:
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而不是字節17的形式返回,與所有其他我不想轉換為十進制的其他字符一樣,我試圖將文字字節的字符串轉換為字節數組以進行檢查-總和創造
您得到的字節只是字節; 它們本質上不是十進制或十六進制。
如果您想將字節傳遞給其他對象(用於校驗和),則可以。
唯一的問題是您將它們以十進制形式寫入控制台-如果您出於任何原因希望以十六進制形式寫入它們,請使用ToString("x")
。
請執行以下操作:
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做任何您想做的事情。
您的代碼正在運行。 檢查一下以觀察不同的轉換並選擇您需要的任何東西:
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 }));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.