读取二进制文件的文本内容并将其显示到stdout

时间:2011-04-03 07:33:42

标签: c

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

typedef struct filedata
{
        char data[100];
}data_t;

data_t * fname=NULL;

//IS AN ARRAY OF the structure filedata REQUIRED HERE

void quit()
{
      printf("\nPress enter to exit");
      fflush(stdin);
          getchar(); 
}    


int main()
{
char ch;   
    fname=(data_t *)malloc(sizeof(data_t));

    FILE *fptr=NULL;
    atexit(quit);
    printf("Please enter the file name to read : ");
    fflush(stdin);
    scanf("%s",fname->data);    
    fptr=fopen(fname->data,"rb");

    if(fptr == NULL)
    {
            perror("Could not open the file ");
            return;
    }
    printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
    printf("Contents of the file %s are : ",fname->data);

    while(fread(&fname, sizeof(data_t), 1,fptr) == 1)
    {
      // what do I put here? 
    }

    fclose(fptr);       
    return 0;
}

我想在计算机上读取包含一些文本或数字的二进制文件,并将其显示在标准输出上。

我该怎么做?

我应该声明一个结构文件数据数组,如data_t data[100]

我应该在上面的while循环中放置什么来显示内容?

一个例子:当然,如果我知道结构中的属性,如姓名,年龄等,那么我可以做类似的事情

while ( fread ( &e, sizeof ( e ), 1, fp ) == 1 )
printf ( "\n%s %d %f", e.name, e.age, e.bs ) ;

但是如何读取任何二进制文件的任何文本内容并将其显示到stdout?

2 个答案:

答案 0 :(得分:1)

标准strings(1)实用程序将打印'可打印字符';默认情况下,它仅显示由不可打印字符终止的四个或更多可打印字符的运行。这是一个足够好的定义,strings(1)可以很容易地使用-n参数来显示更长或更短的字符串。

我可以想到实现该实用程序的两种机制:一种是长度分配数组min字符,因此可用于从管道读取;另一个不会分配数组,但只能处理文件。由于数组版本更有用,我将对其进行描述。

您设置了一个标准循环:

int c;
int index = 0;
char arr[MAX];
FILE* f=fopen(whatever);

while((c=fgetc(f)) != EOF) {
    int flush_output = 0;

    if(isgraph(c))
        arr[index++]=c;
    else if(c == ' ' && index > 0)
        arr[index++]=c;
    else if(index > min)
        flush_output = 1;

    if(flush_output || index == (sizeof(arr)-2)) {
        arr[index]='\0';
        printf("%s", arr);
        index=0;
    }
}

最后有一些不幸的代码;但是我们不能写出数组的末尾,如果到目前为止我们还收集了超过min个字符,我们应该只在数组末尾之前打印输出。这比重复代码要好,但可能有比这更清晰的机制。

答案 1 :(得分:0)

你必须决定一个代表。您可以将文件读出为8位“块”,然后将该值读取为8位整数。这对你有用吗?

如果你想看一个类似于你想要的程序的例子,你应该看看od(1)。它以各种格式转储文件内容。