我有一些长达16个字节的字节串。在我的GUI上,用户将字符0-9输入到textBox中,它将转换为byte[]
,与其他数组连接,并写入端口。
假设用户输入奇数编号的代码:“12345”。我的程序将其转换为:{0x01, 0x02, 0x03, 0x04, 0x05}
。我需要一种方法将奇数编号的代码数组转换为:{0x01, 0x23, 0x45}
。
假设用户输入偶数代码:“1234”。我需要字节数组作为{0x12, 0x34}
读取
该阵列正被写入无线电以对其进行编程,这正是无线电需要发送数据的方式。
这对我有用:
var input = "12345";
var working = input.PadLeft(input.Length + input.Length % 2, '0');
var result =
Enumerable
.Range(0, working.Length / 2)
.Select(x => working.Substring(x * 2, 2))
.Select(x => byte.Parse(x, System.Globalization.NumberStyles.HexNumber));
working
确保输入文本以0
开头,如果它有奇数个字符。
结果只是成对的一组字符,这些字符被解析为十六进制到字节。简单。
所以"12345"
成为{ 1, 35, 69 }
或{ 0x01, 0x23, 0x45 }
。
准确地问你如何指定它
public static byte[] SomethingFunky(byte[] bytes)
{
var list = bytes.ToList();
if (bytes.Length % 2 != 0)
list.Insert(0,0);
return Enumerable.Range(0, list.Count)
.Where(x => x % 2 == 0)
.Select(x => (byte)(list[x] * 10 + list[x + 1]))
.ToArray();
}
用法
var input = "12345".Select(x => byte.Parse(x.ToString())).ToArray();
var list = SomethingFunky(input);
Console.Write(string.Join(", ", list));
产量
1, 23, 45