学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周

一、题目要求

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

二、题目理解

  • Linux下od -tx -tc XXX1的功能:在命令行输入man od进行查看

    225930_c3432c50_4784913.png

  • 英文看不懂的话,这里有中文版

  • 手动在Linux里面对其进行了验证

    230008_75faa557_4784913.png

  • 通过上面准备过程得知Linux下od -tx -tc XXX1的功能为:在以十六进制输出文件内容(默认为四个字节一组)的同时输出字节对应的ASCII值。

三、需求分析

  • 支持在命令行中输入一个字符串:该字符串代表要进行转化的文件名
  • 每行开头为当前读取到的字符数的7位八进制表示
  • 每行读取16个字符,每个字符转化为两位的十六进制数,每四个字符作为一组输出。每输出一行文件内容的十六进制表示,下一行紧接着输出对应的ASCII字符。
  • 全部文本内容输出结束后,输出“\n”的十六进制表示以及对应的ASCII字符
  • 最后输出当前字符总数

四、设计思路

  • 问题1:如何实现在命令行中输入参数?

教材182页Example8_14.java中略微提到一点点。

101922_c3937e97_4784913.png

  • 解决方法:arges[]数组的使用
  • 问题2:如何将每个字符转化为两位的十六进制数?

    001320_068ecce0_4784913.png

  • 调用Integer类的public static String toHexString(int i)方法。
  • 问题3:如何判断已经读取结束了?
  • 解决方法:使用随机流中的length方法返回文件长度,当读取长度与文件长度相等时即为读取结束。

    001423_9e2a360c_4784913.png

五、代码链接

六、代码实现过程中遇到的问题

  • 问题1:输出的十六进制数顺序与实际的相反

    002311_b04ff5b8_4784913.png

  • 解决方法:将s1 =s1+java.lang.Integer.toHexString((int) ch[i])改为s1 = java.lang.Integer.toHexString((int) ch[i])+s1,因为该功能的实现实际是将先读入的当做低位的十六进制输出。
  • 问题2:我程序输出的当前字符总数为107,而实际为110。

    002742_e3724a8d_4784913.png

  • 解决方法:实际上它是把后来输入的“\n”也算进去了。所以我只要在headnumber后面加1就行了。

    003032_5c461da0_4784913.png

    七、运行结果截图

    001935_751e77b3_4784913.png
    002044_3cdd8767_4784913.png

    八、参考资料

  • 《Java2实用教程(第五版)》
  • arges[]数组的使用
  • JDKTM 6 Documentation

转载于:https://www.cnblogs.com/xiannvyeye/p/10772030.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值