MyOD的代码实现

一、题目要求:

编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能

二、设计思路

OD命令详解:

因此,该题目所要实现的功能为以十六进制输出文本内容,同时输出对应的ASCII码值。

三、程序代码

import java.io.*;
public class MyOD{
public static void main(String[] args){
String filename=args[0];
File file= new File(filename);
try {
FileInputStream input = new FileInputStream(file);
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.print("\\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("\\n");
} else {
System.out.printf(" %c ", data[j]);
}
}
break;
}
}
System.out.printf("\n%07o\n", i+3 );
}
catch (IOException e){
System.out.println("Error:"+e);
}
}
}

程序要点分析

  • printf("%02x",data[i])是一个类似C语言的表达方式。%02x代表输出该数字的十六进制,不满两位的第一位补0;
  • 输出结果中每四个字符对应的十六进制串是次序反过来的,例如单词This,T(54),h(68),i(69),s(73)。输出时则会输出73696854。
  • 四个字节为一组,判断开头通过i对16取余判断是否为0实现。

运行截图

总结

必须诚实地讲,这次的代码并非我独立编写。由于抽时间跑了一个密码学计算方法的超长待机的程序,我给自己留下做这个任务的时间并不很多。况且使用mac系统并没有安装linux虚拟机,也没有办法实地操作使用od命令,只能尽可能的查找资料艰涩的理解。此次程序我更多的参考了往届学长学姐的博客。娄老师说如果代码不是自己写的理解透了也是好的。在对学长学姐代码的研究中,我运用了一些小窍门。对代码进行一块一块的分块,如循环体等可以做为小块来独立出去,将这部分代码删去,看看运行结果少了或者偏了哪些,那这部分代码就是用来干什么的,带着这段代码实现的目的去分析,就可以很轻松的理解代码含义。理解了之后发现这个任务并不算难,实现这个功能尚且有其他方法,如果时间足够还可以抽时间重写一次。

MyOD 代码实现的更多相关文章

  1. 20155308&20155316 2017-2018-1 《信息安全系统设计基础》实验一

    20155308&20155316 2017-2018-1 <信息安全系统设计基础>实验一 此次实验我和黄月同学一起做了1.2.3.5项,第4项在实验课上做完了,但是没有按时提交. ...

  2. 20155310 2016-2017-2《Java程序设计》课堂实践补交

    20155310 2016-2017-2<Java程序设计>课堂实践补交 第九周 程序设计中临时变量的使用 public class linshibianliang { public st ...

  3. MyOD C语言代码实现

    Myod C语言实现 一.题目要求 1 复习c文件处理内容 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Ma ...

  4. 实验MyOD

    实验MyOD 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接. 代码如下: (刚开始 ...

  5. 20155215 第二周测试1 与 myod

    课堂测试 第一题 每个.c一个文件,每个 .h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程截图,要全屏,包含自 ...

  6. 20155306 2017-2018-1《信息安全系统设计》第二周课堂测试以及myod的实现

    20155306 2017-2018-1<信息安全系统设计>第二周课堂测试以及myod的实现 第二周课堂测验: (注:前两项在课堂已提交,在此不做详解) 第一项: 每个.c一个文件,每个. ...

  7. 关于5303狄惟佳同学的myod程序设计的补充实现

    关于5303狄惟佳同学的myod程序设计的补充实现 原版代码实现的局限 原版代码主函数 int main(int argc,char *argv[]) { if(strcmp(argv[1], &qu ...

  8. MyOD(课下作业,选做)

    MyOD(课下作业,选做) 代码要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...

  9. 20175208 张家华 MyOD

    一.实现目的: 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 二.功能简介 1.Linux下的od功能是将指定文件内容以八进制.十进制.十六进 ...

随机推荐

  1. 洛谷P4492 [HAOI2018]苹果树(组合数)

    题意 题目链接 Sol 有点自闭,.我好像对组合数一窍不通(~~~~) Orz shadowice // luogu-judger-enable-o2 #include<bits/stdc++. ...

  2. 判断NaN的真假

    isNaN(val) 当val为NaN的时候,isNaN(val)返回ture 当val不为NaN的时候,isNaN(val)返回false

  3. 第二章 运算方法与运算器(浮点数的加减法,IEEE754标准32/64浮点规格化数)

    这一章,主要介绍了好多种计算方法.下面,写一点自己对于有些计算(手写计算过程)的见解. 1.原码.反码.补码 原码:相信大家都会写,符号位在前二进制数值在后,凑够位数即可. 反码:原码符号位不变,其他 ...

  4. day15(PYTHON)推导式{生成器,字典,列表,集合}

    #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...

  5. Ext 日期格式化

    //日期格式化 Date.prototype.Format = function (fmt) { var o = { , //月份 "d+": this.getDate(), // ...

  6. nginx的rewrite ,如何在flask项目中获取重写前的url

    1. 在flask配一个重写到哪的路由,假设是/rewite/,然后到nginx的配置文件写重写规则,我这里重写全部的请求,接着测试能否重写成功 1. 添加一个路由 配置重写规则 测试成功 2.接下来 ...

  7. mac date命令详解

    Mac下的date命令是BSD(Berkeley Software Distribution)系的,Linux下date命令是GNU(GNU's Not Unix)系,二者用法有一些区别. BSD并不 ...

  8. 【Linux高频命令专题(24)】grep

    简述 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则 ...

  9. ORACLE中Scalar subquery Caching的hash table大小测试浅析

      前阵子总结了这篇"ORACLE当中自定义函数性优化浅析"博客,里面介绍了标量子查询缓存(scalar subquery caching),如果使用标量子查询缓存,ORACLE会 ...

  10. 如何获取Azure AD tenant的tenant Id?

          一般情况下,Azure AD用户知道自己tenant域名,因为域名是账户的后缀,例如:contoso.onMicrosoft.com.如果你还不了解什么是Azure AD tenant,可 ...