小编bke*_*dge的帖子

在 C 中一次读取 16 个字节的文件

我正在尝试读取从命令行参数解析的文件,每次 16 个字节。我将字节存储在一个无符号字符数组中。然后,我尝试以 HEX 格式打印元素,然后,如果它们是可打印字符,则打印它们,如果不是,则打印一个点“。” 我还想在每个新行上打印文件开头的字节偏移量,但我想在开始处理之前让其余部分工作。我遇到的问题是我正在读取的文件没有打印,所以我认为我做得不对。我开始使用,fread()但我想我可能需要使用,fseek()但我不确定。如果有人能指出我正确的方向或告诉我我是否做错了什么,我将不胜感激。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fp;

    int i, j;

    unsigned char buffer[17];

    fp = fopen(argv[1], "r");

    while(!feof(fp))
    {
        while(fread(buffer, 16, 1, fp) !=0)
        {

            for(i=0; i < 16; i++)
            {
                printf("%X ", buffer[i]);
            }

            for(j = 0; j < 16; j++)
            {
                if(isprint(buffer[j]))
                    printf("%s", buffer[j]);
                else
                    printf("." );
            }

            printf("\n");
        }
    }

    fclose(fp);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期输出:

0001:  40 4F 28 …
Run Code Online (Sandbox Code Playgroud)

c hex file offset

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

file ×1

hex ×1

offset ×1