делая преобразование из небезопасного указателя в 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