jcShan709 2021-04-05 14:58 采纳率: 100%
浏览 118
已采纳

函数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
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 请用MATLAB画含有二重积分和累加求和的随时间t变化的函数图像,不知如何把二重积分加到循环里,请解答一下
  • ¥15 kali终端update时出现这样的情况
  • ¥15 matlab调用stl文件时报错说内存不足
  • ¥20 医学图像格式、医学图像后处理
  • ¥15 MATLAB中的矩阵分离问题
  • ¥15 服务端可运行语言,解析unity文件
  • ¥15 英飞凌TC387使用MCAL唤醒TJA1145问题
  • ¥15 android tv图标显示异常
  • ¥20 (标签-AR|关键词-预测分析)
  • ¥15 QT IFW 自定义界面添加lineedit小键盘输入数字无效果