将字节为[]的函数从C#转换为C++;
我的函数有原始C#代码: 它们就像一个符咒,我将把它们转换成C++将字节为[]的函数从C#转换为C++;,c#,c++,arrays,C#,C++,Arrays,我的函数有原始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];
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;
}
公共静态字节[]加密块(字节[]文件缓冲区)
{
int a,i,j,k,tmp;
int[]键,框;
字节[]密码;
key=newint[KeyBoxLength];
框=新整数[KeyBoxLength];
cipher=新字节[filebuffer.Length];
对于(i=0;i
这就是他们如何看待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;
}
std::字符串转换::加密块(std::字符串和缓冲区)
{
int32a,i,j,k,tmp;
int键[256];
整数框[256];
字节*密码=新字节[buffer.length];
对于(i=0;i(密码));
删除[]密码;
返回ret;
}
当我编译它时,我得到了:
我已经收到了一些关于如何转换它们和动态分配字节数组的文章。但在我看来,它似乎不起作用,我无法理解如何将那些工作的C代码转换成C++。没有解决如何将C {字节[]分解为无符号*int C++,将这些数组转换为STD::string:
那么,我做错了什么?请解释一下,为什么?它应该是怎样的?
另一个例子:
std::string::length
是一种方法,而不是常量。您看到的错误告诉您无法将“指向std::string
的成员函数的指针”转换为无符号int
。您缺少一对括号:
BYTE* cipher = new BYTE[buffer.length()];
// ^^ Here
与您的问题无关,您应该使用std::vector
,而不是管理自己的原始数组。您可以将密码的声明更改为
std::vector<BYTE> cipher(buffer.length());
std::string ret(cipher.begin(), cipher.end());
那么你就不必记得删除[]密码了
。没有真正的理由将cipher
复制到ret
但是,您可以将cipher
声明为std::string cipher(buffer.length(),'\0')
和返回密码直接编码。我已经读过这些,并尝试过,但它们告诉我“表达式必须有一个常量值”。我完全失望。“EAMONMCVEOVC++没有可变长度数组。但是它确实有std::vector
。上面的代码“应该”起作用,因为我看不到任何错误(我做的和教程上的一样),而且IntelliTrace上没有任何内容,没有任何红线。只是简单不编译。。。屏幕上方。不知道如何转换这些…哦,谢谢你解释这些@如果答案帮助你解决了问题/错误,请将其标记为正确答案,以便阅读你的问题或有相同问题的其他人知道去哪里查找。