1. 程式人生 > >編程實現Linux系統的od功能

編程實現Linux系統的od功能

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功能