⑴ 如何實現二進制文件對比
提供幾個方法供參考:
命令行下的diff/cmp命令,可以得出這兩個binary是否完全一樣:
diff file1 file2 cmp -b file1 file2
命令行下的hexmp,得到hex文本後,再用diff比較兩個文件的hex文本:
hexmp file1.bin > file1.hex
hexmp file2.bin > file2.hex
diff file1.hex file2.hex
計算這兩個文件的MD5或SHA1,得到的hash值相同則是同一個文件
⑵ 計算機編程中的diff是什麼意思
diff 命令比較文本文件。它能比較單個文件或者目錄內容。
注:
diff 命令只有當輸入為文本文件時才有效。
如果指定了 Directory1 和 Directory2 參數,diff 命令比較兩個目錄下名字相同的文本文件。列出不同的二進制文件、公共子目錄和只在一個目錄出現的文件。 當 diff 命令運行於常規文件時,且當目錄比較期間比較不同的文本文件時,diff 命令顯示文件中哪些行必須更改以保持它們一致。如果 File1 和 File2 參數都不是目錄,其中之一可能給定負號「-」,以採用標准輸入。如果 File1 參數是目錄,則使用目錄中與 File2 參數指定的文件名一致的那個文件。
⑶ 淺析二進制文件與普通文件的區別
近日,在寫一個遍歷查找目錄文件內容功能時,在使用時功能很正常,確發現了些異常。讀取文件時會將一些二進制文件讀取出來,搜索目標字元串。本文將詳細解析如何正確使用程序區分兩種文件(基於c).
文中所指的二進制文件是指可執行文件,或者圖片等非文本類型文件,即Binary文件。
首先,為了文件的簡單,我們手工生成兩個文件,一個普通文件,一個二進制可執行文件
生成普通文件
生成可執行文件a.out
使用grep 查找hello時,兩個文件輸出為
grep是碰到可執行文件時會輸出Binary file
文本文件是一種計算機文件,它是一種典型的順序文件,其埋禪文件的邏輯結構又屬於流式文件。(來源網路)
本文定義為:文本文件是一種順序存儲了unicode編碼,或者其他編碼字元的文件。因為不僅可以存英文還可以存放一些表情及換行等其他字元。
將依次遍歷文檔,然後與所有的可能的編碼中的字元進行查找比較,如果所有字元都符合在這些編碼字元列表中,則當前文檔即為一個文本文檔。
不過這種方法的效率堪憂,有沒有一種更簡單的方法呢。當然有!
當我們使用十六進制的方式打開兩個文件,就會發現不同了。同時對比了一張圖片的十六進制
圖片
在文本文件的十六進制備液虛編碼同時將 unicode符號也在文本中展示出來了。也可以從文本文件的定義可以得出,非ascii不能作為檢測二進制的方法。
但是通過對比三個文件的十六進制編碼會發仿燃現,可執行文件與圖片中包含 了很多00,即空字元,而文本文件中是不存在的。
所以初步結論是不含有空字元的文件即為二進制文件.
但是我們總不能從文件頭到尾去判斷吧,所以我們查看grep與diff源碼會發現一段宏
所以我們取一段數據長度判斷,如果是包含了空字元就是非文本類型文件,比如取1024個位元組。因為二進制文件一般會有一個文件頭,而文件頭的數據長度大約128個位元組。取1024位元組是盡可能的避免頭中數據寫滿。
當然以上方法只針對於utf-8, asccii ,如果是utf-16或者 utf-32 在數據中也同樣會產生空字元
使用grep中同樣會將其識別為binary file 所以不向下做研究了。
⑷ diff命令如何排除二進制文件,不比較
diff這個命令本身就是做文本文件比較的, 不判斷文件類型;
如果需要排除某些類型的文件(例如: 二進制文件), 應該結合使用其他用來判斷文件類型的命令(例如:file)或者編寫shell腳本