Разница в файле jpg: из потока tcp wireshark и из сокета C++

Я пытаюсь записать изображение в формате jpeg, отправленное камерой Ethernet, в потоке mjpg. Изображение, которое я получаю с помощью своего приложения Borland C++ (VSPCIP), в Notepad++ выглядит идентично потоку tcp, сохраненному из приложения Wireshark (за исключением количества символов: 15540 в моем файле и 15342 в файле wireshark, тогда как содержимое jpeg- объявлена ​​длина 15342). То есть у меня на 198 неотображаемых символов больше, чем ожидалось, но оба файла имеют 247 строк.

Вот два файла: http://demo.ovh.com/fr/a61295d39f963998ba1244da2f55a27d/

Какой инструмент я мог бы использовать (в Notepad ++ (я пытался отобразить в UTF8 или ANSI: файлы по-прежнему совпадают, хотя они не имеют одинакового количества символов) или другой редактор) для просмотра неотображаемых символов?


person Arnaud    schedule 13.01.2012    source источник
comment
В вашей программе вы открываете файл в двоичном или текстовом режиме?   -  person Some programmer dude    schedule 13.01.2012
comment
В моей программе я сохраняю байт из потока TCP в: BYTE * ImageFrame = new BYTE [ContentLength]; и для создания файла (просто для просмотра данных BYTE*) я использую: std::ofstream * mpofs; mpofs = новый std::ofstream(out.jpg); for(int i=0;i‹ContentLength;i++) *mpofs ‹‹ImageFrame[i];   -  person Arnaud    schedule 13.01.2012


Ответы (1)


std::ofstream по умолчанию открывает файл в текстовом режиме, что означает, что он может переводить символы новой строки ('\n' двоичные 0x0a) в последовательность возврата каретки/новой строки ("\r\n", двоичные 0x0d и 0x0a).

Откройте выходной файл в двоичном режиме, и это, скорее всего, решит вашу проблему:

std::ofstream os("filename", ios_base::out | ios_base::binary);
person Some programmer dude    schedule 13.01.2012
comment
ok tak, std::ios_base помог: у меня есть хорошее изображение в формате jpg, моя проблема, возможно, где-то еще: иногда у меня есть неполные кадры (хотя я использовал мьютекс, чтобы избежать чтения байта * во время его заполнения, моя проблема должна быть в том, как я расшифровываю tcp поток, ищу этот путь и рассказываю дальше). Спасибо - person Arnaud; 13.01.2012
comment
Хорошо, я нашел неполный кадр jpeg: он имеет 21690 символов (для изображения jpeg 640x480), и среди них есть строка из 5045 следующих символов, которые имеют значение NUL (отображается как NUL в Notepad++). Две вещи: - Я хотел бы сначала удалить эти поврежденные кадры - было бы хорошо понять в считываемом байте TCP, почему он добавляет эту строку - person Arnaud; 13.01.2012
comment
На самом деле я перенесу это на другой вопрос. - person Arnaud; 13.01.2012
comment
Перемещено сюда: stackoverflow.com/questions/8853460/ - person Arnaud; 13.01.2012