我有一些字节字符串,最长16个字节。在我的GUI上,用户将0-9字符输入到文本框中,然后将其转换为byte[]
,并与其他数组串联,然后写入端口。
说用户输入一个奇数代码:“ 12345”。我的程序将其转换为:
{0x01, 0x02, 0x03, 0x04, 0x05}
。我需要一种将奇数代码数组移至此的方法:{0x01, 0x23, 0x45}
。
假设用户输入一个偶数代码:“ 1234”。我需要字节数组读取为{0x12, 0x34}
此阵列正被写入无线电以对其进行编程,而这正是无线电需要发送数据的方式。
答案 0 :(得分:0)
这对我有用:
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 }
。
答案 1 :(得分:0)
完全按照您的要求输入问题
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