本帖最后由 qiuqingpo 于 2010-12-04 10:37:21 编辑

解决方案 »

  1.   


        class Program
        {
            static void Main(string[] args)
            {
                byte[] bs = new byte[] {1,0,0,0,10,
                                        1,0,0,0,12,
                                        2,0,0,0,12,
                                        123,2 };
                byte[][] result = Split(bs, 4);        }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="inputData">输入字节</param>
            /// <param name="pkgLen">包长</param>
            /// <returns>分包结果</returns>
            public static byte[][] Split(byte[] inputData,int pkgLen)
            {  
               
                List<byte[]> outData = new List<byte[]>();
                int index=0;
                if (inputData==null)
                {
                    return outData.ToArray();
                }
                int len=inputData.Length;
                //
                byte[] len2Bytes = new byte[pkgLen];
                //直到剩余字节比(包长的存储字节)小;
                while (pkgLen <= len - index)
                {
                    //获取(包长)字节
                    Array.Copy(inputData, index, len2Bytes, 0, pkgLen);
                    //获取内容长度
                    int len2 = BitConverter.ToInt32(len2Bytes, 0);
                    byte[] content;
                    //如果剩余字节足够
                    if (len2 <= len - (pkgLen + index))
                    {
                        content = new byte[len2];                }
                    else //不足
                    {
                        content = new byte[len - (pkgLen + index)];
                    }                Array.Copy(inputData, index + pkgLen, content, 0, content.Length);
                    index = index + pkgLen + content.Length;
                    outData.Add(content);            }
                return outData.ToArray();
            }
        }