Es ursprünglichen C# Code für meine Funktion ist: arbeitet sie wie ein Zauber, und ich werde sie zu C++Funktion Convert mit byte [] von 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;
}
konvertieren Und das ist, wie sie aussieht auf C++, aber ich habe keine Ahnung, warum ich diese Fehler habe.
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;
}
Und wenn ich kompilieren, dass, ich habe dies bekam:
Ich habe bereits einige Artikel, wie sie konvertieren und weisen dynamisch ein Byte-Array. Aber in meinem Fall scheint es, dass es nicht funktioniert, und ich kann nicht verstehen, wie man diejenigen, die C# -Code arbeiten, in C++ umwandelt. Ich habe nicht verstanden, wie C# byte [] in unsigned * int C++ aufgelöst wird, mit der Umwandlung dieses Arrays in std :: string nach.
Nun, was mache ich da falsch? Und erklären Sie bitte, warum? Und wie soll es sein? Ein anderes Beispiel:
Ich habe schon gelesen, und versuchen Sie, aber sie sagen mir, "Ausdruck muss einen konstanten Wert haben". Ich bin total enttäuscht. –
@EamonnMcEvoy C++ hat keine Arrays variabler Länge. Es hat jedoch 'std :: vector'. –
Code oben, "sollte" funktioniert, weil ich nicht in der Lage bin, einen Fehler zu sehen (ich habe das gleiche wie in Tutorials getan), und auch, gibt es nichts auf IntelliTrace, ohne irgendwelche roten Linien. Nur einfach nicht kompiliert ... Bildschirm oben. Weiß nicht, wie man diese umwandelt ... –