将二进制字符数组放在文件 C++ 中

Put a binary char array in a file C++

提问人:Grahn 提问时间:2/6/2022 最后编辑:Maarten BodewesGrahn 更新时间:2/6/2022 访问量:117

问:

我正在编写一个程序,其中一台服务器向客户端发送二进制消息。 我收到服务器发送的二进制数据,但随后无法将其正确放入文件中。 然后目标是使用 openSSL 解密文件。

这是我的代码:

int     client::_writeFile()
{
    char    buf[bytes_received * bytes_received];
    recv(this->_socket, buf, bytes_received, 0);
    std::string const file("files/recv");
    std::ofstream f(file.c_str(), std::ios::binary);
    
    for (int i = 0; i < bytes_received + 1; i++)
    {
        f.write(&buf[i],sizeof(buf[i]));
    }
    f.close();

    system("openssl enc -d -aes-256-cbc -in files/recv -out files/decrypted.txt -pass pass:.key");
    
    return (SUCCESS);
}

提前感谢您的帮助!

C++ 文件 缓冲区 IOSTREAM bin

评论

2赞 user17732522 2/6/2022
"但是我无法将其正确放入文件中“:到底出了什么问题?
3赞 user17732522 2/6/2022
另请注意,这看起来很可疑。数组的大小必须是标准 C++ 中的编译时常量,为什么数字会平方尚不清楚。char buf[bytes_received * bytes_received];
1赞 Igor Tandetnik 2/6/2022
首先,不一定能获得与请求的字节数完全相同的字节数;您需要检查其返回值。其次,即使假设它确实接收了字节,您也在将字节写入文件;最后一个字节是随机垃圾。recvbytes_receivedbytes_received+1
0赞 Maarten Bodewes 2/6/2022
我已经删除了加密标签,因为该问题与加密命令无关;请将您的应用程序拆分为逻辑部分。
1赞 pm100 2/6/2022
并且一次在该循环中写入一个字节,效率非常低

答:

0赞 pm100 2/6/2022 #1

你需要一些类似的东西

char    buf[1000];
std::string const file("files/recv");
std::ofstream f(file.c_str(), std::ios::binary);
while(true){
   int count = recv(this->_socket, buf, sizeof(buf), 0);
   if (count ==0)
      break;
    f.write(buf,count);
}
f.close();

这假定远程端在完成数据发送后关闭连接