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 而不是字节 17 返回,与所有其他人一样我不想转换为十进制我试图将文字字节字符串转换为字节数组以进行检查-总和创造

4

3 回答 3

2

你得到的字节只是字节;它们本质上不是十进制或十六进制。

如果您想将字节传递给其他东西(用于校验和),它们很好。

您唯一的问题是您以十进制形式将它们写入控制台 -ToString("x")如果您出于任何原因希望以十六进制形式将它们写出,请使用。

于 2012-05-16T09:58:13.210 回答
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 做任何你想做的事。

于 2016-11-22T07:52:49.733 回答
0

您的代码正在运行。检查此以观察不同的转换并选择您需要的任何内容:

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 }));
于 2012-05-16T09:53:18.753 回答