private unsafe int GetHashCodeBigEndian()

in Microsoft.Shared.Dna.Hash/AffineHash.cs [530:562]


        private unsafe int GetHashCodeBigEndian(byte* valuePointer, int length)
        {
            ulong result = 0UL;
            ulong block = 0U;
            int remainder = length & 3; // mod 4
            int cutoff = length - remainder;
            int i = 0;
            while (i < cutoff)
            {
                block =
                    ((ulong)(*(valuePointer + i++)) << 24) |
                    ((ulong)(*(valuePointer + i++)) << 16) |
                    ((ulong)(*(valuePointer + i++)) << 8) |
                    ((ulong)(*(valuePointer + i++)));
                result = this.ComputeSmallBlock(result + block);
            }

            if (remainder == 0)
            {
                return (int)result;
            }

            byte* remainderPointer = valuePointer + cutoff;
            int offset = 24;
            block = 0UL;
            for (i = 0; i < remainder; i++)
            {
                block |= (ulong)(*(remainderPointer + i)) << offset;
                offset -= 8;
            }

            return (int)this.ComputeSmallBlock(result + block);
        }