20155219实践题目实现od命令
实践题目
编写MyOD.c 用myod XXX实现Linux下od -tx -tc XXX的功能
od的功能:
od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
选项-t:指定输出格式,格式包括a、c、d、f、o、u和x。
参数x[SIZE]:十六进制,SIZE字节为单位以十六进制输出。
od -tx XXX是以十六进制输出XXX的内容,默认以四字节为一组显示。(XXX中字符对应的ascii值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)
遇到的问题
- 1.如何输出行号?
通过观察发现,每行开头这串数字为八进制,数值为在本行之前的字符数。所以,只需在prinf()函数中格式化输出printf("%07o",参数)即可。
- 2.发现程序无法显示“\n”的ASCII字符导致与od命令不完全相符?
对读取的字符进行判断,如遇到“\n”,手动输出。要注意使用转义字符,即printf("\n")。对于最后一行的序号即为i的个数,是一个计数功能,其个数比字符数多1,因为将换行符也计入其中。
但是仍出现如下错误,如图:
想到一个方法:在每个字符输出之后做一个判断如果下一个字符输出是‘\0’,则手动输出‘\n’。但遇到如下错误,如图:
仍在想解决办法。
- 3.如何输出两行不同形式的字符
在输出行号的同时使用一个for循环将刚刚输出的字符的ASCII码值再重新输出一遍。
- 4.输出遇到如下问题,最后一行无法输出其ASCII码的值,如图:

解决方法:在程序结尾处新加一个for循环,开头引入新的变量h,用于计数本行字符的个数。
程序如下:
#include <stdio.h>
#define m 1000
int main()
{
int i=0,j=0,g,h=0;
char fileName[100];
char str[m],temp[m];
printf("od filename:");
gets(fileName);
FILE *in=fopen(fileName,"r");
if (in==NULL)
{
printf("Error 404: Object not found!");
}
else
{
printf("%07o",0);
printf(" ");
while(!feof(in))
{
fscanf(in,"%c",&str[i]);
if (j%16==0&&j!=0)
{
printf("\n");
printf(" ");
for(g=i-h;g<i;g++)
{
printf("%x ",str[g]);
}
printf("\n");
printf("%07o",j);
printf(" ");
}
printf("%c ",str[i]);
i++;
if(str[i+1]=='\n')
{printf("\\n");}
j++;
h++;
if(h==17)
h=1;
}
printf(" ");
for(g=i-h;g<i;g++)
{
printf("%x ",str[g]);
}
}
fclose(in);
printf("\n");
printf("%07o",i);
printf("\n");
return 0;
}
最终截图:
20155219实践题目实现od命令的更多相关文章
- linux之od命令
od [OPTION]... [FILE]... 把文件用8进制或者其他的格式显示出来.通常用于查看特殊格式文件的内容. 这个命令默认把文件的内容用八进制的形式清晰地写在标准输出上.如果是多个文件 ...
- [转]Linux之od命令
转自:http://os.51cto.com/art/200912/173136.htm 随着计算机飞速的发展,很多人开始学习Linux,怎样才能学好Linux,一定要学好Linux的命令.学习Lin ...
- linux下hexdump和od命令:显示文件十六进制格式
Linux指令: od 示例用法: od -c hello Linux指令: od od命令用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制.十六进 ...
- linux od命令
用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制.十六进制和ASCII码来显示文件.od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Du ...
- MongoDb进阶实践之六 MongoDB查询命令详述(补充)
一.引言 上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入,对查询又有了新的东西,决定补充进来.如果大家想看上一篇有关MongoDB查询的 ...
- MyOD-Linux od命令的实现
MyOD 一.设计思路 确定MyOD的要求 根据需求可知MyOD需要实现类似Linux下 od -tx -tc XXX的功能,于是先去网上查找了一下od命令的-tx以及-tc参数的作用,经查找后了解到 ...
- linux od命令详解
Linux od命令 Linux od命令用于输出文件内容.od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来 将指定文件以八进制形式(默认)转储到标准输出.如果指定了多于一个的文件参数 ...
- Linux od命令(以指定进制显示文件)
从“读取二进制文件”出发,到od命令的使用 在桃村实习期间,一直努力做毕业设计,我的毕业设计中有一个内容就是读取SEGY文件.在读取文件时,经常遇到的问题时你要读取浮点型数据,这时你就必须考虑你所使用 ...
- Linux必知必会——od命令
1.功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符.od命令系统默认的显示方式是八进制,名称源于Oc ...
随机推荐
- weblogic控制台用户名密码修改
1.记得用户名密码但想修改密码修改方法 保存后立即生效,即你退出后即能以新密码登录:但由于启动的用户名密码和登录的用户名密码是同一个,所以我们需要去修改DOMAIN_HOME/servers/serv ...
- killl prefix out macro mis mal micro -m
1● macro 宏大,规模大 2● mis 错误,坏 3● mal 坏,错误 4● micro 小,微小
- GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名 zhuan
1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...
- R语言中的采样与生成组合
不放回采样:sample(1:10, 5, replace = FALSE) 生成组合:
- linux系统管理 设置别名
查看和设定别名 'alias' 查看系统中所有的命令别名 [root@ssgao1987 ~]# alias alias cp='cp -i' alias l.='ls -d .* --color=a ...
- js将接口返回的数据序列化
<div style={{marginLeft: '80px'}}> <pre> {th ...
- Uva 11520 - Fill the Square 贪心 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- [BZOJ3173]最长上升子序列
Problem 给你n个数A1~An,每次将i插入第Ai位后,最后输出每次插入后这个数列的最长上升子序列 Solution 这道题非常的妙.首先如果新加入的这个数构成了最长上升子序列,由于在它插入之前 ...
- zookeeper集群环境搭建(纯zookeeper)
1.首先在三台机子上放上zookeeper的解压包,解压. 然后的话zookeeper是依赖于jdk的,那么也应该安装jdk,这里不详细说明了. mv zookeeper-3.4.5 zookeepe ...
- CAN总线(1)--初探(更新中)
前言: CAN总线可以控制可以使用Xilinx中IP核来直接实现,也可以使用专用的CAN芯片(例如:SJA1000)通过单片机和FPGA驱动控制来实现: 目前是使用控制器SJA1000来进行实现: C ...