我从以下两个值开始:
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};
到目前为止,我的所有尝试都没有成功。有人能指出我正确的方向吗?
答案 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);
}