gpt4 book ai didi

c++ - 使用 reinterpret_cast 将 char* 转换为 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:43 26 4
gpt4 key购买 nike

我正在使用一个名为 botan 的库进行加密。但这里的情况与库无关,它似乎是 c++ 或转换中的问题。使用库创建一个 16 字节长的 vector ,如下所示。

  SecureVector<byte> salt = rng.random_vec(16);

然后它被转换成一个字符串,

  std::string salt_string ((const char*)salt.begin() , salt.size());

使用 Qt 我可以将 srting 读取为,

  ui->textEdit->append("Salt is : "+ QString::fromStdString(salt_string));

现在我需要将其写入文件并在稍后重新生成 vector 。它被写入一个文件,

 ofstream outfile ("salt.txt" , std::ios::binary);
outfile.write((const char*)salt.begin(), salt.size());

到目前为止,代码看起来运行良好,但在读取和重新生成 vector 时出现了问题。

这是我如何将数据读取到 char* 数组,

  ifstream infile ("salt.txt" , std::ios::binary );
char* salt = new char[16];
infile.read(salt , 16 );

现在我需要重新创建 SecureVector<byte>作为 salt2 ,我尝试使用 reinterpret_cast 来做到这一点如下所示,

 SecureVector<byte> salt2 = reinterpret_cast<byte> (salt);

编译没有错误,但在尝试显示时返回空字符串,因为我在上面显示了 salt。我做错了什么或如何正确进行转换。任何帮助或建议将不胜感激。

最佳答案

reinterpret_cast 不会神奇地将一种类型转换为另一种类型,即使看起来确实如此。坦率地说,除非并且直到您了解它的作用,否则您不应该永远使用它。

要使 vector 包含数组中的字节,请创建 vector ,然后将字节添加到其中。你不能使用强制转换来做到这一点。

SecureVector<byte> salt2(salt, salt + 16);

关于c++ - 使用 reinterpret_cast 将 char* 转换为 vector<byte>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30287441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com