實現Linux下od -tx -tc XXX的功能
阿新 • • 發佈:2018-06-11
throw 文件內容 type info () hello cep key 找規律 的區別在於輸出的次序
實現Linux下od -tx -tc XXX的功能
一、od命令
(1)功能
od命令用於將指定文件內容以八進制、十進制、十六進制、浮點格式或ASCII編碼字符方式顯示,通常用於顯示或查看文件中不能直接顯示在終端的字符。
常見的文件為文本文件和二進制文件。od命令主要用來查看保存在二進制文件中的值,按照指定格式解釋文件中的數據並輸出。
(2)命令格式
od [<選項><參數>] [<文件名>]
(3)命令選項
-t<TYPE>
:指定輸出格式,格式包括a、c、d、f、o、u和x,各含義如下:
- a:具名字符;
- c:ASCII字符或者反斜杠;
- d[SIZE]:十進制,正負數都包含,SIZE字節組成一個十進制整數;
- f[SIZE]:浮點,SIZE字節組成一個浮點數;
- o[SIZE]:八進制,SIZE字節組成一個八進制數;
- u[SIZE]:無符號十進制,只包含正數,SIZE字節組成一個無符號十進制整數;
- x[SIZE]:十六進制,SIZE字節為單位以十六進制輸出,即輸出時一列包含SIZE字節。在默認條件下,以四個字節為一組輸出
二、題目分析
od -tx File
是以十六進制輸出File的內容,默認以四字節為一組顯示。
od -tc File
輸出字節對應的ASCII值
題目中od -tx -tc File
是先在以十六進制輸出File文件內容的同時,輸出字節對應的ASCII值,它與od -tc -tx File
三、MyOD.java
import java.io.*; public class MyOD{ public static void main(String[] args) throws IOException { try (FileInputStream input = new FileInputStream("/home/darkeye/cxgg20165312/20165312/hello")) { byte[] data = new byte[1024]; int i, flag; input.read(data); for (i = 0; i < 1024; i = i + 4) { if (i % 16 == 0) { System.out.printf("\n%07o\t\t", i ); } //四個字節為一組,一行四組。i=16時為左側第一列(默認的地址),格式為七位八進制。 // 通過找規律,其數值是該行第一個字符的序號值(從0到length-1)對應的的八進制數 System.out.printf(" %02x%02x%02x%02x\t", data[i + 3], data[i + 2], data[i + 1], data[i]); if ((i + 4) % 16 == 0) { System.out.println(); System.out.printf("\t "); for (int j = i - 12; j < i+4 ; j++) { if ((int) data[j] == 10) { System.out.printf(" \\"); System.out.printf("n "); } else { System.out.printf(" %c ", data[j]); } } } if (data[i+4] ==0 ) { System.out.println(); System.out.printf("\t "); for (int j = i-i%16; data[j-3] != 0; j++) { if ((int) data[j] == 10) { System.out.printf(" \\"); System.out.printf("n "); } else { System.out.printf(" %c ", data[j]); } } break; } } System.out.printf("\n%07o\n", i+3 ); } } }
實現Linux下od -tx -tc XXX的功能