其他分享
首页 > 其他分享> > Myod 选做

Myod 选做

作者:互联网

一、题目要求

二、od命令

od命令
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

语法:od [<选项><参数>] [<文件名>]
命令中各选项的含义:

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal
Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。

其中本次作业中需要实现的是:
-tc:输出ASCII字符及反斜杠序列(如\n)
-tx:输出十六进制数
实现指令:myod -tc -tx XXX.txt

三、实现过程

设计思路:
要实现的od -tc -tx1 XXX命令,-tc表示输出ASCII字符,-tx1表示以十六进制输出,每组输出一字节。
利用printf函数的输出控制字符串的控制代码,可以方便输出字符变量的ASCII值。
通过控制转换说明符来规定输出形式。
1)myod.c文件
用于打开测试的txt文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argv,char *argc[]){
FILE *fp;
fp=fopen(argc[1],"rb");
if(fp==NULL){
printf("Failure to open file\n");
return 0;
}
char ch;
char STR[1000];
int i,n;
i=0;
while((ch=fgetc(fp))!=EOF){
STR[i]=ch;
i++;
}
STR[i]='\0';
fclose(fp);
od(STR,i);
}
2)od.c文件
调用od.c实现od -tc -tx功能
#include "head.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void od(char STR[1000], int i)
{
int k = 1;
int j = 0;
int line = 0;
printf("%06d ", line);
putchar(STR[0]);
for (k = 1; k <= i; k++)
{
if (k % 16 != 0 && STR[k] != '\0')
{
if (STR[k] != '\n')
{
printf(" %2c", STR[k]);
continue;
}
else
{
printf(" \\n");
continue;
}
}
else
{
printf("\n ");
for (j = m; j < k; j++)
{
printf(" %02x", STR[j]);
}
printf("\n%06d", k + 2);
m = k;
}
}
printf("\n");
}

3)头文件head.h
#ifndef HEAD_H
#define HEAD_H
void od(char STR[],int);
#endif

4)结果测试:
Txt文件内容:
Curry_mvp 20191223zjy

程序运行结果:

四、静态库和动态库的创建与实现

静态库:
参照教材39页的内容

动态库:

五、makefile实现

Makefile内容:

结果如图:

六、遇到的问题

标签:十六进制,选做,int,od,STR,printf,include,Myod
来源: https://www.cnblogs.com/zzjjyy123/p/15332936.html