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

问题描述 投票:-1回答:2

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

假设用户输入奇数编号的代码:“12345”。我的程序将其转换为:{0x01, 0x02, 0x03, 0x04, 0x05}。我需要一种方法将奇数编号的代码数组转换为:{0x01, 0x23, 0x45}

假设用户输入偶数代码:“1234”。我需要字节数组作为{0x12, 0x34}读取

该阵列正被写入无线电以对其进行编程,这正是无线电需要发送数据的方式。

c#
2个回答
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 }


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

Full Demo Here

© www.soinside.com 2019 - 2024. All rights reserved.