Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将不安全指针转换为Span<;T>;_C#_Memory_.net Core_Task_Helper - Fatal编程技术网

C# 将不安全指针转换为Span<;T>;

C# 将不安全指针转换为Span<;T>;,c#,memory,.net-core,task,helper,C#,Memory,.net Core,Task,Helper,将不安全指针转换为Span 我试图转换它,但总是给我一些错误 那么程序员有什么帮助吗 public void Encrypt(Byte* pBuf, Int32 Length) { Kernel.assert(pBuf != null); Kernel.assert(Length > 0); Byte* pBlock = stackalloc Byte[CAST5_BLOCK_SIZE];

将不安全指针转换为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转换的代码

每次改变长度时,这个转换器都给了我错误的长度

这很奇怪

 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);
        }

公共不安全无效加密(Span src,Span dst)
{
变量长度=src.长度;
字节*pBlock=stackalloc字节[CAST5_块大小];
NativeMethods.memcpy(pBlock、EncryptIV、CAST5块大小);
int x=0;
while(长度-->0)
{
如果(EncryptNum==0)
加密(pBlock);
var val=(字节)(src[x]^pBlock[EncryptNum^3]);
pBlock[EncryptNum^3]=val;
dst[x++]=val;
EncryptNum=(EncryptNum+1)和(CAST5块大小-1);
}
NativeMethods.memcpy(EncryptIV、pBlock、CAST5块大小);
}

对不起,我的英语不好,请阅读。另外,请添加您收到的详细错误消息。。它给了你一些错误是没有帮助的问题描述它给了我错误的长度请阅读。另外,请添加您收到的详细错误消息。。它给了你一些错误的东西不是一个有用的问题描述它给了我错误的长度