• MyOD 代码实现


    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("
    %07o		", i );
                    }
                    System.out.printf(" %02x%02x%02x%02x	", data[i + 3], data[i + 2], data[i + 1], data[i]);
                    if ((i + 4) % 16 == 0) {
                        System.out.println();
                        System.out.printf("	  ");
                        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("	   ");
                        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("
    %07o
    ", 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命令,只能尽可能的查找资料艰涩的理解。此次程序我更多的参考了往届学长学姐的博客。娄老师说如果代码不是自己写的理解透了也是好的。在对学长学姐代码的研究中,我运用了一些小窍门。对代码进行一块一块的分块,如循环体等可以做为小块来独立出去,将这部分代码删去,看看运行结果少了或者偏了哪些,那这部分代码就是用来干什么的,带着这段代码实现的目的去分析,就可以很轻松的理解代码含义。理解了之后发现这个任务并不算难,实现这个功能尚且有其他方法,如果时间足够还可以抽时间重写一次。

  • 相关阅读:
    ios swift模仿qq登陆界面,xml布局
    类和结构体的区别
    获取或者设置时,无后缀和A后缀和W后缀的区别
    mfc控件学习
    MFC之简单计算器
    双冒号、点操作、箭头的区别
    MFC使用MsComm做串口通信
    保存结构体到本地(二进制)
    文件管理函数
    文件定位的几个函数
  • 原文地址:https://www.cnblogs.com/darklord0604/p/10787625.html
Copyright © 2020-2023  润新知