jpg文件差异:来自wireshark tcp流和来自C++;插座

jpg文件差异:来自wireshark tcp流和来自C++;插座,tcp,jpeg,wireshark,mjpeg,content-length,Tcp,Jpeg,Wireshark,Mjpeg,Content Length,我正试图在mjpg流中记录由以太网摄像机发送的jpeg图像。 用Borland C++应用程序获得的图像(VSPCIP)在记事本++中与从应用程序WiReSARK中保存的TCP流看起来相同(除了字符数:在我的文件中有15540个,WiReSARK文件中有15342个,而JPEG内容长度被宣布为15342)。 也就是说,我比预期多了198个不可显示字符,但两个文件都有247行 以下是两个文件: 我可以使用哪个工具(在记事本++(我试图用UTF8或ANSI显示:文件仍然匹配,但它们没有相同的字符数

我正试图在mjpg流中记录由以太网摄像机发送的jpeg图像。 用Borland C++应用程序获得的图像(VSPCIP)在记事本++中与从应用程序WiReSARK中保存的TCP流看起来相同(除了字符数:在我的文件中有15540个,WiReSARK文件中有15342个,而JPEG内容长度被宣布为15342)。 也就是说,我比预期多了198个不可显示字符,但两个文件都有247行

以下是两个文件:


我可以使用哪个工具(在记事本++(我试图用UTF8或ANSI显示:文件仍然匹配,但它们没有相同的字符数)或其他编辑器来查看不可显示的字符?

std::ofstream
默认情况下以文本模式打开文件,这意味着它可能会转换换行字符(
“\n”
二进制0x0a)转换为回车/换行符序列(
“\r\n”
,二进制0x0d和0x0a)

以二进制模式打开输出文件,很可能会解决您的问题:

std::ofstream os("filename", ios_base::out | ios_base::binary);

在您的程序中,您是以二进制还是文本模式打开文件?在我的程序中,我将TCP流中的字节存储为:byte*ImageFrame=new byte[ContentLength];为了创建文件(仅查看字节*的数据),我使用:std::ofstream*mpofs;mpofs=new std::ofstream(“out.jpg”);用于(int i=0;iok-tak,std::ios_base helped:我有一个很好的jpg图像,我的问题可能在其他地方:我有时会有不完整的帧(虽然我使用互斥来避免读取字节*,但在填充时,我的问题一定是我解码tcp流的方式,我用这种方式搜索并进一步说明)。谢谢我找到了一个“不完整的jpeg帧”:它有21690个字符(对于640x480 jpeg图像),其中有一个5045个字符的字符串,其值为“NUL”(在记事本++中显示为NUL)。两件事:-我想首先删除这些损坏的帧-最好在TCP“readbyte”中理解为什么要加上这个字串我会转移到另一个问题上。转移到这里: