Запись в изображение

Я пытаюсь извлечь изображение из потока 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 для файла размер файла намного меньше, чем изображение, которое было передано. Это правильный способ записи двоичного файла?

Я пытаюсь сделать этот в C ++

0

Решение

Использование std :: string обрезает ваши данные по первому символу с нулевым символом в конце (даже если std :: string не является строкой с нулевым символом в конце). Конструктор std :: string принимает символ * и принимает строку с нулевым символом в конце. Вот доказательство этого:

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

Вы должны использовать std :: vector для хранения ваших данных.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]