将字节为[]的函数从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];

我的函数有原始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;
    }
公共静态字节[]加密块(字节[]文件缓冲区)
{
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上没有任何内容,没有任何红线。只是简单不编译。。。屏幕上方。不知道如何转换这些…哦,谢谢你解释这些@如果答案帮助你解决了问题/错误,请将其标记为正确答案,以便阅读你的问题或有相同问题的其他人知道去哪里查找。