sjc_0910
2021-04-05 14:58
采纳率: 100%
浏览 64

函数return QByteArray变量时会出问题?

我想用openssl来在qt里完成加密,但在返回加密后的数据时会出问题

QByteArray sha256(const QByteArray &data) {
    unsigned char hash[SHA256_DIGEST_LENGTH];
    SHA256_CTX ctx;
    SHA256_Init(&ctx);
    SHA256_Update(&ctx, data, data.size());
    SHA256_Final(hash, &ctx);
    // qDebug() << QByteArray::fromRawData((char*)hash, SHA256_DIGEST_LENGTH).toHex();
    // 这里输出的是正常的
    return QByteArray::fromRawData((char*)hash, SHA256_DIGEST_LENGTH);
}

int main(int argc, char **argv) {
    QCoreApplication a(argc, argv);
    qDebug() << sha256("Hello!").toHex();
    // 这里输出不对,并且每次运行输出结果都不同
    return a.exec();
}

qt版本:5.14.2

编译器:MSVC 2017 x64

Openssl版本:1.1.1g Win64

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • GKatHere 2021-04-05 20:24
    已采纳
    深浅拷贝的区别:
    浅拷贝是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的对象”复制进去,所以原始对象和新对象引用同一对象,新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。
    深拷贝是在引用方面不同,深拷贝就是创建一个新的和原始字段的内容相同的字段,是两个一样大的数据段,所以两者的引用是不同的,之后的新对象中的引用型字段发生改变,不会引起原始对象中的字段发生改变。
    一种初始化QByteArray方式是给它的构造函数传入一个const char* 即可。此时,QByteArray执行了深拷贝(deep copy、如值类型),如果出于效率考虑不想执行深拷贝,使用QByteArray::fromRawData(const char * data, int siz)/* 返回的 QByteArray 对象将会和数据指针相关联。在linux移动设备中内存资源宝贵,常常使用浅拷贝
    ————————————————
    版权声明:本文为CSDN博主「czhzasui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/czhzasui/article/details/81507187
    点赞 1 打赏 评论

相关推荐 更多相似问题