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

时间:2019-02-19 03:32:49

标签: c#

我有一些字节字符串,最长16个字节。在我的GUI上,用户将0-9字符输入到文本框中,然后将其转换为byte[],并与其他数组串联,然后写入端口。

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

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

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

2 个答案:

答案 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

Full Demo Here