沒有爲我的功能原來的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上也沒有任何內容,沒有任何紅線。只是簡單不編譯...屏幕上方。不知道如何轉換這些... –