byte[] one = { 0X00, 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79, 0X00, 0X00 };
 byte[] two = { 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79 };
如何使用tow 分割one 获得一个byte[][]{ {0x00},{0x00,0x00} }

解决方案 »

  1.   

    可能不是最优方法,但是能得出结果BitConverter.ToString(one).Split(new[] { BitConverter.ToString(two) }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries)).ToArray();
      

  2.   

    这是一个最笨最慢的做法using System;namespace ConsoleApp1
    {
        class Program
        {        static void Main(string[] args)
            {
                byte[] one = { 0X00, 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79, 0X00, 0X00 };
                byte[] two = { 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79 };
                var result = Split(one, two);
                Console.WriteLine("分割位置:{0}-{1}, {2}-{3}", 0, result - two.Length - 1, result, one.Length - 1);
                Console.WriteLine("................按任意键结束");
                Console.ReadKey();
            }        /// <summary>
            static int Split(byte[] x, byte[] s)
            {
                for (var i = 0; i < x.Length; i++)
                {
                    var flag = true;
                    var k = i;
                    for (var j = 0; j < s.Length; j++, k++)
                    {
                        if (x[k] != s[j])
                        {
                            flag = false;
                            break;
                        }
                    }
                    if (flag)
                        return k;
                }
                return -1;
            }    }
    }
    如果要快速分割大数组,应该看正规的“算法、数据结构”教材中相关的 split 优化算法。
      

  3.   

    byte数组转成16进制,然后就是string的Split的事情了
      

  4.   

    BitConvert