将值添加到字节数组

时间:2010-05-28 14:45:00

标签: c# .net bytearray

我从以下两个值开始:

finalString = "38,05,e1,5f,aa,5f,aa,d0";
string[] holder = finalString.Split(',');

我像这样循环通过持有人:

foreach (string item in holder)
{
  //concatenate 0x and add the value to a byte array
}

在每次迭代中,我想连接一个0x以使其成为十六进制值并将其添加到字节数组中。

这就是我在完成循环时希望字节数组的样子:

byte[] c = new byte[]{0x38,0x05,0xe1,0x5f,0xaa,0x5f,0xaa,0xd0};

到目前为止,我的所有尝试都没有成功。有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:6)

您不必连接前缀“0x”。解析文字时,C#编译器使用此前缀,但byte.Parse不使用它

byte[] myByteArray = new byte[holder.Length];
int i = 0;
foreach (string item in holder)
{
    myByteArray[i++] = byte.Parse(item, System.Globalization.NumberStyles.AllowHexSpecifier); 
}

答案 1 :(得分:4)

你可以做一个单行:

var c = holder.Select(s => byte.Parse(s, NumberStyles.AllowHexSpecifier)).ToArray();

c现在是一个包含所需数据的字节数组。

答案 2 :(得分:1)

只需创建一个新的字节数组,该数组是放在一起的两个数组的大小。然后插入一个,并将第二个插入新缓冲区。 .net中的数组大小是不可变的

另一种方法是使用像List这样的东西,然后循环遍历每个数组并添加它

var buffer = new List<byte>();
foreach(var b in firstArray) buffer.Add(b);
foreach(var b2 in secondArray) buffer.Add(b2);

byte[] newArray = buffer.ToArray();

答案 3 :(得分:1)

这将根据您拥有的逗号分隔十六进制值生成字节值列表:

     string hex_numbers = "38,05,e1,5f,aa,5f,aa,d0";
     string[] hex_values = hex_numbers.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
     byte[] byte_array = new byte[hex_values.Length];
     for(int i = 0; i < hex_values.Length; i++)
     {
        byte_array[i] = byte.Parse(hex_values[i], System.Globalization.NumberStyles.AllowHexSpecifier);
     }