迄今爲止,我一直在使用程序集IBM 8086架構進行實踐,並且我收到了編寫交換任意兩行文件的程序的任務。 (我通過參數給出了這兩行的數據文件名和編號)。我的程序的算法如下:非文本格式文件中換行符的順序如何?
1)我使用有限大小的緩衝區(例如20字節大小的緩衝區)。我從文件中讀取數據到這個緩衝區,如果達到了文件結尾,不斷地檢查ax寄存器的值。
2)我將該緩衝區傳遞給檢查13d符號(CR ASCII代碼)並將緩衝區的元素傳遞到新的寫入文件緩衝區的過程,如果檢測到符號13d,則傳遞給寫入文件緩衝區停止,並且新行觸發器變量設置爲1.然後,如果找到此換行符13d符號,則調用另一個將文件指針返回到正確位置的過程(因爲我使用自定義大小的緩衝區,所以我可能會找到13d符號在緩衝區中間,所以我需要重新設置指針來糾正新行)。
因此,我的程序似乎與.txt文件正常工作,但是當我嘗試交換2個隨機行,例如.exe或.jpg文件,然後再次交換相同的行時,我無法打開該文件,因爲操作系統說它已經損壞。
我的問題是:是否可以嘗試交換任意兩行非文本格式文件,然後嘗試將其更改回來並期望新文件正常工作?這個概念理論上應該起作用嗎?或者由於各種不同的新線序列解釋(CF + NL,NL + CF等等),這樣轉換後的程序是否損壞是可以的?
換句話說:非文本文件中新行符號的解釋是什麼?他們的序列對於正確的程序操作是否重要?
感謝您的回答,如果需要我的部分代碼才能回答問題,請注意這一點。
如果你的方法將使文件字節爲原始字節相同,它將工作。如果不是,那幾乎肯定不會。這是彙編語言;一切都只是字節,除非你通過一些庫函數來讀取數據,這些函數試圖爲你規範新行。我建議使用'md5sum'或'crc32'來散列文件內容,或者僅僅使用'diff'或'cmp'來對付原始內容。 (這些是unix shell命令,但是有相應的windows,並且名稱應該是顯而易見的。) –
等一下,有限的緩衝區大小?所以當你找到一個「行」時,你實際上只會移動前面的18字節?嗯,取決於你如何實現它,這可能不會成爲一個問題,如果在新放置的數據開始時,行檢測將處於相同的狀態。我沒有仔細閱讀你算法的細節。 –