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

函数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 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)