2019-2020-1 《信息安全系统设计基础》MyOD



一、要求

  1. 编写myod.c,用 myod XXX 实现 Linux 下 od -tx -tc XXX 的功能。
  2. 复习 c 文件处理内容。
  3. main 与其他分开,制作静态库和动态库。
  4. 编写 makefile。
  5. 提交测试代码和运行结果截图,要全屏,包含自己的学号信息。
  6. 提交博客,重点写遇到的问题和解决过程。


二、设计流程

1. 需求分析

执行 od -tx -tc 1.txt 的命令显示如下:

复制[yogile@yogile-pc MyOD]$ od -tx -tc 1.txt 
0000000        0a333231        0a333231        34340a0a        0a343434
          1   2   3  \n   1   2   3  \n  \n  \n   4   4   4   4   4  \n
0000020        32330a0a        34323334        32330a32        34323334
         \n  \n   3   2   4   3   2   4   2  \n   3   2   4   3   2   4
0000040        0000000a
         \n
0000041
  1. 每两行要求显示目标文件的16个字符的对应信息:
  2. 第一行以每四个字节为一组,依次输出四次,并按照小端法形式输出显示;
  3. 第二行按序输出这16个字符,每一个十六进制4字节数组的最后一位,对应下第二行四字符一组的最后一位;
  4. 每要输出一组16字符信息,在开头输出该16字符第一个字符所占的字节序号,文件输出结束时显示最后一字符的字节序列;
  5. 当文件输出到最后几个字节,不满足16个字符一组时,按照16字符组标准输出,其中若4个4字符组中的一个组没有字符,则不显示。
  6. 通过命令行参数,调用文件相关命令,实现读取文件。

2. 概要设计

  • (1) main.c 实现文件读取操作,通过循环输出每16字符第一个字符所占的字节序号,积极在循环中调用输出显示函数,最后显示最后一字符的字节序号。

  • (2) tans_0x.c 实现函数 void tans_0x(char char_pl[], int i); 实现对每16字符组输出显示,以每四个字节为一组,依次输出四次,并按照小端法形式输出显示。

  • (3) tans_pr.c 实现函数 void tans_pr(char char_pl[], int i); 按序输出该16字符组,与 tans_0x(); 函数输出对齐。

伪代码

复制// 头文件
int main(/* 命令行参数 */) {
    if (/* 打开文件失败条件*/) {
        // 结束程序
    }
    while(/* 条件 */) {
        // 调用tans_0x();
        // 调用tans_pr();
    }
    if (/* 判断文件有字符 */) {
        // 输出最后一字符的字节序号
    }
    else {
        // 输出 "0000000"
    }
    return 0;
}

void tans_0x(char char_pl[], int i_n) {
    // for循环,将16字符组以每四个字节为一组,按照小端法形式排序
    if (/* 4字符组为"00000000"时 */) {
        // 不输出
    }
    else {
        // 输出
    }
}

void tans_0x(char char_pl[], int i_n) {
    for (/* i从0到i_n-1*/) {
        if (char_pl[i] == '\n') {
            printf("  \\n");
        }
        else {
            // 输出字符
        }
    }
}

3. 详细设计

main.c

main.c
复制


tans_0x.c

tans_0x.c
复制

tans_pr.c

tans_pr.c
复制

tansp.h

tansp.h
复制



三、编写Makefile,并制作动、静态库

Makefile

Makefile
复制










作者:Yogile

出处:https://www.cnblogs.com/Yogile/p/11603755.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Yogile  阅读(229)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题