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

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法