예제 #1
0
        /// <summary>
        /// 指定した長さの範囲のデータを読み取ります。
        /// </summary>
        /// <param name="rangeLength">読み取るデータの長さを指定します。</param>
        /// <returns>読み取った範囲を BinarySubstr として返します。</returns>
        public BinarySubstr ReadRange(int rangeLength)
        {
            BinarySubstr r = new BinarySubstr(this.array, this.offset + this.index, rangeLength);

            this.index += rangeLength;
            return(r);
        }
예제 #2
0
        /// <summary>
        /// 非同期化解除を行います。
        /// </summary>
        /// <returns>非同期化を解除した後のデータを返します。</returns>
        public BinarySubstr ResolveUnsync()
        {
            BinarySubstr r = new BinarySubstr(new byte[this.length], 0);

            unsafe
            {
                fixed(byte *pImgB = &this.array[this.offset]) fixed(byte *pDatB = &r.array[r.offset])
                {
                    byte *pDat  = pDatB;
                    byte *pImg  = pImgB;
                    byte *pImgM = pImg + this.length;

                    while (pImg < pImgM)
                    {
                        if ((*pDat++ = *pImg++) == 0xff && *pImg == 0)
                        {
                            pImg++;
                        }
                    }
                    r.length = (int)(pDat - pDatB);
                }
            }
            return(r);
        }