MyOD
题目
编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能
Linux下od功能详解
od(octal dump)命令可以以八进制、十进制、十六进制和ASCII码来显示文件或者流,它们对于访问或可视地检查文件中不能直接显示在终端上的字符
- 使用:
od [-A 地址进制] [-t 显示格式] 文件
- 进制
- o 八进制(系统默认值)
- d 十进制
- x 十六进制
- n 不打印位移值
- 格式
- c ASCII字符或反斜杠序列(如\n)
- d 有符号十进制数
- f 浮点数
- o 八进制(系统默认值)
- u 无符号十进制数
- x 十六进制数
- e.g.
radish608@kali:~$ cat abc
123abc
a
s
d
radish608@kali:~$ od -tc -tx abc
0000000 1 2 3 a b c \n a \n s \n d \n
61333231 610a6362 640a730a 0000000a
0000015
Java实现OD功能
- 码云链接
- 代码
/**
* Created by radish608 on 17-5-31.
*/
import java.io.*;
class IO {
public static void dump(InputStream src) throws IOException {
try (InputStream input = src) {
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 );
}
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 );
}
}
}
public class MyOD {
public static void main(String[] args) throws IOException {
IO.dump(new FileInputStream(args[0]));
}
}
- 范例文件内容
123abc12345
a
s
d12adfadfa
- 运行结果