C# 将不安全指针转换为Span<;T>;
将不安全指针转换为Span 我试图转换它,但总是给我一些错误 那么程序员有什么帮助吗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];
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块大小);
}
对不起,我的英语不好,请阅读。另外,请添加您收到的详细错误消息。。它给了你一些错误是没有帮助的问题描述它给了我错误的长度请阅读。另外,请添加您收到的详细错误消息。。它给了你一些错误的东西不是一个有用的问题描述它给了我错误的长度