C++该怎样高效的把遍历后的字符串作为函数参数返回?

我该怎样把遍历后的字符串作为函数参数返回?
本人是初学者,最近用MFC封装了一个加密程序,想把加密后计算出的字符串作为函数参数返回,请问怎样用string封装

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/470697406676115.jpg "#left"

unsigned char2Calculate_512()
{
    int i;
    extern char putin[102400];
    cin.get(putin, 102400);


    for (unsigned int i = 0; i < strlen((char*)putin); i++) {
        printf("%02x", putin[i]);
    }
    unsigned char sha512Code[64];
    SHA512_CB sha512;
    SHA512Init(&sha512);
    SHA512Update(&sha512, (unsigned char*)putin, strlen((char*)putin));
    SHA512Final(&sha512, sha512Code);

    //Md5加密后的32位结果
    for (i = 0; i < 64; i++)
    {
        cout<< sha512Code[i];
    }
    return (unsigned char)sha512Code;
}


在C++中,你可以使用std::string类来封装字符串,并将其作为函数的返回值。在你的代码中,可以这样修改函数的返回类型和返回值:

#include <string>

std::string Calculate_512()
{
    // your code here
    unsigned char sha512Code[64];
    // ...
    // convert sha512Code to a hex string
    std::string result;
    char buffer[3];  // to hold the hex string of each byte
    for (int i = 0; i < 64; i++) {
        sprintf(buffer, "%02x", sha512Code[i]);
        result += buffer;
    }
    return result;
}

在函数中,你可以将计算出的sha512Code转换成一个十六进制字符串,并将其存储到std::string对象result中,最后将result作为函数的返回值。

需要注意的是,在将字节转换成十六进制字符串时,需要使用sprintf函数或其他函数将其格式化成两个字符宽度的十六进制字符串。

加个string引用类型的函数参数

void char2Calculate_512(string &str)
{
    int i;
    extern char putin[102400];
    cin.get(putin, 102400);
 
 
    for (unsigned int i = 0; i < strlen((char*)putin); i++) {
        printf("%02x", putin[i]);
    }
    unsigned char sha512Code[64];
    SHA512_CB sha512;
    SHA512Init(&sha512);
    SHA512Update(&sha512, (unsigned char*)putin, strlen((char*)putin));
    SHA512Final(&sha512, sha512Code);
 
    //Md5加密后的32位结果
    for (i = 0; i < 64; i++)
    {
        cout<< sha512Code[i];
    }
    str = sha512Code;
}