gpt4 book ai didi

c++ - 写入图像

转载 作者:行者123 更新时间:2023-11-28 07:56:21 26 4
gpt4 key购买 nike

我正在尝试从 HTTP 流中提取图像。我需要使用 C++ 而不是其他库,除了 libpcap 来捕获数据包。这是我正在做的:

if ((tcp->th_flags & TH_ACK) != 0) {
i = tcp->th_ack;
const char *payload = (const char *) (packet + SIZE_ETHERNET + size_ip + size_tcp);
size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);
std::string temp(payload);
dict.insert(std::pair<u_int,std::string>(tcp->th_ack,temp));
}

然后我连接所有具有相同 ACK 编号的数据包:

 std::string ss;
for(itt=dict.begin(); itt!= dict.end(); ++itt) {
std::string temp((*itt).second);
ss.append(temp);
}
std::ofstream file;
file.open("image.jpg", std::ios::out | std::ios::binary)
file << ss;
file.close();

现在,当我将 ss 写入文件时,文件的大小远小于传输的图像。这是编写二进制文件的正确方法吗?

我正在尝试做 this在 C++ 中

最佳答案

使用 std::string 将在第一个空终止字符处剪切数据(即使 std::string 不是空终止字符串)。 std::string 的构造函数接受一个 char* 并假定一个空终止字符串。这是一个证明:

char sample [] = {'a', 'b', '\0', 'c', 'd', '\0', 'e'};
std::string ss(sample);

您应该使用 std::vector 来存储您的数据。

关于c++ - 写入图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633666/

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