編程實現Linux系統的od功能

選作題目以及分析

  • 題目:編寫MyOD.java 用java MyOD XXX實現Linux下od -tx -tc XXX的功能
  • 分析:我以爲這道題目中的參數應當是-tx1而不是-tx,使用了-tx後結果以下:

而使用-tx1後的結果以下:
java

自學od功能

  • 語法
    od [option] file(s)編程

  • 經常使用參數以及功能
    指定參數:
    -A :指定地址基數,包括:.net

    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文檔中:
    code

  • 運行代碼,獲得以下結果:
    blog

  • 成功運行出Linux系統下的od命令圖片

編程中遇到的問題和解決

  • 問題一:一開始並無注意到輸出所有字符後須要輸出一個「\n」符號,到最後纔想起來,可是要改代碼又要所有都改很麻煩
  • 問題一解決:翻找課本後發現隨機流是能夠調用lenth()方法來直接得到一個文件裏面的字符個數的,因此「投機取巧」,在開頭建了個隨機流來得到文件中的字符個數,最後和已經輸出的字符個數作比較,相等時打印「\n」以及對應的兩位16進制ASCII碼。

參考資料

心得體會

這個選作難度比較小,可是若是要對od命令的其餘功能進行擴充的話感受仍是有點麻煩的。實現方法應該是:須要針對命令行輸入的參數不一樣使用多個if-else語句。文檔

相關文章
相關標籤/搜索