没有为我的功能原来的C#代码: 他们的工作就像一个魅力,我将其转换为C++转换函数[]从C#和C++
public static byte[] EncryptBlock(byte[] filebuffer)
{
int a, i, j, k, tmp;
int[] key, box;
byte[] cipher;
key = new int[KeyBoxLength];
box = new int[KeyBoxLength];
cipher = new byte[filebuffer.Length];
for (i = 0; i < KeyBoxLength; i++)
{
key[i] = XorContentLock[i % XorContentLock.Length];
box[i] = i;
}
for (j = i = 0; i < KeyBoxLength; i++)
{
j = (j + box[i] + key[i]) % 256;
tmp = box[i];
box[i] = box[j];
box[j] = tmp;
}
for (a = j = i = 0; i < filebuffer.Length; i++)
{
a++;
a %= KeyBoxLength;
j += box[a];
j %= KeyBoxLength;
tmp = box[a];
box[a] = box[j];
box[j] = tmp;
k = box[((box[a] + box[j]) % KeyBoxLength)];
cipher[i] = (byte)(filebuffer[i]^k);
}
return cipher;
}
这就是他们如何看起来C++,但我没有想法,为什么我有这些错误。
std::string Conversion::EncryptBlock(std::string& buffer)
{
int32 a, i, j, k, tmp;
int key[256];
int box[256];
BYTE* cipher = new BYTE[buffer.length];
for (i = 0; i < KeyBoxLength; i++)
{
key[i] = XorFileLock[i % 16];
box[i] = i;
}
for (j = i = 0; i < KeyBoxLength; i++)
{
j = (j + box[i] + key[i]) % 256;
tmp = box[i];
box[i] = box[j];
box[j] = tmp;
}
for (a = j = i = 0; i < buffer.length; i++)
{
a++;
a %= KeyBoxLength;
j += box[a];
j %= KeyBoxLength;
tmp = box[a];
box[a] = box[j];
box[j] = tmp;
k = box[((box[a] + box[j]) % KeyBoxLength)];
cipher[i] = (byte)(buffer[i]^k);
}
std::string ret(reinterpret_cast< char const* >(cipher));
delete[] cipher;
return ret;
}
当我编译,我有这样的:
我已经得到了如何将它们转换,并动态分配一个字节数组的一些文章。但在我的情况,似乎是行不通的,我不知道如何将那些工作的C#代码转换为C++。没有得到如何将C#byte []解析为unsigned * int C++,并将这些数组转换为std :: string之后。
那么,我在做什么错?请解释一下,为什么?它应该是怎样的? 又如:
我已经阅读过这些内容,然后尝试,但他们告诉我“表达式必须有一个恒定的值”。我完全失望。 –
@EamonnMcEvoy C++没有可变长度数组。它确实有'std :: vector'。 –
上面的代码“应该”起作用,因为我无法看到任何错误(我在教程上完全一样),并且IntelliTrace上也没有任何内容,没有任何红线。只是简单不编译...屏幕上方。不知道如何转换这些... –