2012-01-13 155 views
0

我試圖記錄以太網攝像機發送的jpeg圖像在mjpg流中。 我使用Borland C++應用程序(VSPCIP)獲得的圖像在Notepad ++中與從應用程序Wireshark保存的tcp流看起來完全相同(字符數除外:我的文件中爲15540,wireshark文件中爲15342,而jpeg內容長度被宣佈爲15342)。 這就是說,我有198個不可顯示的字符超過預期,但這兩個文件都有247行。jpg文件區別:從wireshark tcp流和C++套接字

這裏有兩個文件: http://demo.ovh.com/fr/a61295d39f963998ba1244da2f55a27d/

我可以(在記事本++使用何種工具(我試過在UTF8或ANSI顯示:文件仍然匹配,而他們不具有相同的字符數)或另一個編輯器)查看不可顯示的字符?

+0

在你的程序中,你打開二進制或文本模式下的文件? – 2012-01-13 14:11:45

+0

在我的程序中,我將來自TCP流的字節存儲到: BYTE * ImageFrame = new BYTE [ContentLength]; 並創建一個文件(只是查看BYTE的數據*)我使用: std :: ofstream * mpofs; mpofs = new std :: ofstream(「out.jpg」); for(int i = 0; i Arnaud 2012-01-13 14:29:52

回答

1

std::ofstream默認打開在文本模式下的文件,這意味着它可能換行符('\n'二進制0X0A)轉換爲回車/新行序列("\r\n",二進制0X0D和0X0A)。

以二進制方式打開輸出文件,它將最有可能解決您的問題:

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

ok tak,std :: ios_base幫助:我有一個很好的jpg圖像,我的問題也許在其他地方:我有時候不完整的框架(雖然我用互斥鎖來避免在填充時讀取字節*,但我的問題必須以我解碼tcp流的方式,我以這種方式進行搜索並進一步說明)。謝謝 – Arnaud 2012-01-13 14:48:33

+0

好吧,我找到了一個「不完整的jpeg幀」:它有21690個字符(對於640x480 jpeg圖像),其中有5045個字符的值爲「NUL」(在Notepad ++中顯示爲NUL)。 兩件事: - 我首先想要刪除這些損壞的幀 - 這將是很好理解在TCP「readbyte」爲什麼它增加了這個字符串 – Arnaud 2012-01-13 15:52:34

+0

我會移動到另一個問題的事實。 – Arnaud 2012-01-13 15:55:04