Преобразовать небезопасный указатель в Span <T> - PullRequest
1 голос
/ 25 января 2020

делая преобразование из небезопасного указателя в Span, я пытался преобразовать его, но всегда давал мне что-то не так, поэтому любая помощь от программистов

 public void Encrypt(Byte* pBuf, Int32 Length)
        {
            Kernel.assert(pBuf != null);
            Kernel.assert(Length > 0);

            Byte* pBlock = stackalloc Byte[CAST5_BLOCK_SIZE];
            Kernel.memcpy(pBlock, EncryptIV, CAST5_BLOCK_SIZE);

            while (Length-- > 0)
            {
                if (EncryptNum == 0)
                    Encipher(pBlock);

                Byte val = (Byte)(*pBuf ^ pBlock[EncryptNum ^ 3]);

                pBlock[EncryptNum ^ 3] = val;
                *(pBuf++) = val;

                EncryptNum = (EncryptNum + 1) & (CAST5_BLOCK_SIZE - 1);
            }
            Kernel.memcpy(EncryptIV, pBlock, CAST5_BLOCK_SIZE);
        }

кода, который я конвертировал, используя Span

this конвертор дал мне неправильную длину каждый раз, когда длина менялась

это странно

 public unsafe void Encrypt(Span<byte> src, Span<byte> dst)
        {
            var Length = src.Length;
            byte* pBlock = stackalloc byte[CAST5_BLOCK_SIZE];
            NativeMethods.memcpy(pBlock, EncryptIV, CAST5_BLOCK_SIZE);
            int x = 0;
            while (Length-- > 0)
            {
                if (EncryptNum == 0)
                    Encipher(pBlock);

                var val = (byte)(src[x] ^ pBlock[EncryptNum ^ 3]);

                pBlock[EncryptNum ^ 3] = val;
                dst[x++] = val;
                EncryptNum = (EncryptNum + 1) & (CAST5_BLOCK_SIZE - 1);
            }

            NativeMethods.memcpy(EncryptIV, pBlock, CAST5_BLOCK_SIZE);
        }

извините за мой плохой английский sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...