编程实现Linux系统的od功能
2024-08-26 00:24:13
选做题目以及分析
- 题目:编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能
- 分析:我觉得这道题目中的参数应当是-tx1而不是-tx,使用了-tx后结果如下:
而使用-tx1后的结果如下:
自学od功能
语法
od [option] file(s)常用参数以及功能
指定参数:
-A :指定地址基数,包括:d 十进制 o 八进制(系统默认值) x 十六进制 n 不打印位移值
-t :指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
程序设计
- 根据截图再次分析:由开始的截图我们可以知道,每行只输出16个字符,在这16个字符的下方打印相应的ASCII码,每行的开头对应该行字符个数的8位8进制数。另外,观察到全部输出完毕后总是会输出一个'\n'。
- 根据这些分析我们就能知道,这其实不是一个很难的程序,伪代码:
读取命令行输入的参数(文件名)
以16为每个字符串的长度读取文件中的内容,得到字符串s1
每读取一个,进行下列操作直到文件中的消息全部读完:
{
设定新的字符串s2=s1
先输出每行开头printf("%07o",截止到上一行,字符的个数)
按一定间隔输出s1
换行
按一定间隔输出s2中每个字符的ASCII码
}
最后一行输出字符的总个数printf("%07o",字符的总个数)
编程实现
关键代码注释(见图片)
将一段歌词写在a.text文档中:
运行代码,得到如下结果:
成功运行出Linux系统下的od命令
编程中遇到的问题和解决
- 问题一:一开始并没有注意到输出全部字符后需要输出一个“\n”符号,到最后才想起来,但是要改代码又要全部都改很麻烦
- 问题一解决:翻找课本后发现随机流是可以调用lenth()方法来直接获得一个文件里面的字符个数的,所以“投机取巧”,在开头建了个随机流来获得文件中的字符个数,最后和已经输出的字符个数做比较,相等时打印“\n”以及对应的两位16进制ASCII码。
参考资料
心得体会
这个选做难度比较小,但是如果要对od命令的其他功能进行扩充的话感觉还是有点麻烦的。实现方法应该是:需要针对命令行输入的参数不同使用多个if-else语句。
最新文章
- 利用BMFont和NGUI制作字体集
- sql-函数avg,count,max,min,sum
- python 递归函数
- (redis缓存更新策略)postgres 9.4.1 &;&; redis 3.7.0 &;&; redis_fdw_REL9_4_STABLE
- poj 1681 Painter's Problem
- centos上如何安装mysql
- [原创]浅谈如何使用gcc开发NT核心驱动程序
- java 线程 捕获异常
- Support For C++11/14/17 Features (Modern C++)
- Eclipse 打包Web项目
- vue中axios访问Java后端跨域问题解决
- 三元运算符 c = a if a>;b else b
- window + office 激活方法(不提供下载)
- this 的理解
- python学习第二天-基本数据类型常用方法
- Linux系统网络基础知识及配置
- CUDA Samples:Vector Add
- 【java规则引擎】基本语法和相关属性介绍
- Codeforces - 240F 是男人就上26棵线段树
- Visualforce入门第一篇_2017.3.1