C# 如何将字节数组{0x01,0x02,0x03}转换(或移位)为{0x01,0x23}?

C# 如何将字节数组{0x01,0x02,0x03}转换(或移位)为{0x01,0x23}?,c#,C#,我有一些长达16字节的字节字符串。在我的GUI上,用户将字符0-9输入文本框,它被转换为字节[],与其他数组连接,并写入端口 假设用户输入奇数代码:“12345”。我的程序将此转换为: {0x01、0x02、0x03、0x04、0x05}。我需要一种方法将奇数编码数组移到以下位置:{0x01、0x23、0x45} 假设用户输入偶数代码:“1234”。我需要字节数组读取为{0x12,0x34} 此阵列正在写入收音机以对其进行编程,这正是收音机需要发送数据的方式。这对我来说很有用: var inpu

我有一些长达16字节的字节字符串。在我的GUI上,用户将字符0-9输入文本框,它被转换为
字节[]
,与其他数组连接,并写入端口

假设用户输入奇数代码:“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));
工作
确保输入文本以
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

您的用户输入十六进制我接受?将数字除以256不,先生,用户输入的是ASCII整数0-9。谢谢!成功了。然而,为了使“result”成为字节数组,我必须添加.ToArray();