編程實現Linux系統的od功能
阿新 • • 發佈:2018-06-10
ava 實現 else語句 輸出 TE ref ID 十進制數 .net
選做題目以及分析
- 題目:編寫MyOD.java 用java MyOD XXX實現Linux下od -tx -tc XXX的功能
- 分析:我覺得這道題目中的參數應當是-tx1而不是-tx,使用了-tx後結果如下:
而使用-tx1後的結果如下:
自學od功能
語法
od [option] file(s)常用參數以及功能
指定參數:
-A :指定地址基數,包括:d 十進制 o 八進制(系統默認值) x 十六進制 n 不打印位移值
-t :指定數據的顯示格式,主要的參數有:
c ASCII字符或反斜杠序列 d 有符號十進制數 f 浮點數 o 八進制(系統默認值為02) u 無符號十進制數 x 十六進制數
程序設計
- 根據截圖再次分析:由開始的截圖我們可以知道,每行只輸出16個字符,在這16個字符的下方打印相應的ASCII碼,每行的開頭對應該行字符個數的8位8進制數。另外,觀察到全部輸出完畢後總是會輸出一個‘\n‘。
根據這些分析我們就能知道,這其實不是一個很難的程序,偽代碼:
讀取命令行輸入的參數(文件名) 以16為每個字符串的長度讀取文件中的內容,得到字符串s1 每讀取一個,進行下列操作直到文件中的消息全部讀完: { 設定新的字符串s2=s1 先輸出每行開頭printf("%07o",截止到上一行,字符的個數) 按一定間隔輸出s1 換行 按一定間隔輸出s2中每個字符的ASCII碼 } 最後一行輸出字符的總個數printf("%07o",字符的總個數)
編程實現
關鍵代碼註釋(見圖片)
將一段歌詞寫在a.text文檔中:
運行代碼,得到如下結果:
成功運行出Linux系統下的od命令
編程中遇到的問題和解決
- 問題一:一開始並沒有註意到輸出全部字符後需要輸出一個“\n”符號,到最後才想起來,但是要改代碼又要全部都改很麻煩
- 問題一解決:翻找課本後發現隨機流是可以調用lenth()方法來直接獲得一個文件裏面的字符個數的,所以“投機取巧”,在開頭建了個隨機流來獲得文件中的字符個數,最後和已經輸出的字符個數做比較,相等時打印“\n”以及對應的兩位16進制ASCII碼。
參考資料
- od命令的使用
心得體會
這個選做難度比較小,但是如果要對od命令的其他功能進行擴充的話感覺還是有點麻煩的。實現方法應該是:需要針對命令行輸入的參數不同使用多個if-else語句。
編程實現Linux系統的od功能