打印从二进制文件在某个文件位置C读取的字节

时间:2019-03-21 19:59:29

标签: c io fopen fread

我正在尝试从二进制文件到屏幕的固定文件位置(256)打印固定数量的字节(128)。 但是,结果显示如下:

output screenshot

作为参考,我真的不知道二进制文件中的内容。但我怀疑这不是正方形。

代码在这里:

int main() 
{
   FILE *file;
   char *buffer;

   file = fopen ( "binaryfile.bin" , "rb" );
   if (file==NULL) 
   {
       fputs ("Couldn' open file",stderr);
       exit (-1);
   }

    fseek (file , 0 , 256);
    buffer = (char*) malloc (sizeof(char)*128);
    fread (buffer,128,1,file);
    fwrite (buffer , sizeof(char)*128, 1, stdout);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

fseek (file , 0 , 256);是错误的。 fseek的第三个参数应该是SEEK_SETSEEK_CURSEEK_END中的一个; second 是偏移量。要将文件指针设置为文件中的第256个字节,请使用:

fseek(file, 256, SEEK_SET);

答案 1 :(得分:1)

此程序是mcve,它显示如何从二进制文件中读取128个字节并将每个字节打印为2位十六进制值:

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

int main() {
    FILE *file;
    char *buffer;
    file = fopen("binaryfile.bin", "rb");
    if (file == NULL) {
        perror("Could not open file");
        exit(1);
    }
    fseek(file, 256, SEEK_SET);
    buffer = malloc(sizeof(char) * 128);
    fread(buffer, sizeof(char), 128, file);
    for (int index = 0; index < 128; index++) {
        printf("%02X", ((unsigned int) buffer[index]) & 0x0FF);
        if (index % 8 == 7) {
            printf("\n");
        }
        else {
            printf(" ");
        }
    }
    printf("\n");
    return 0;
}

示例输出

AD 0D 25 C8 74 AD D3 13
D5 00 62 EC CF 73 8E A4
61 2E 31 2F 70 ED D3 14
03 CC 06 B6 FB 77 FB ED
B4 0A 59 5F 50 00 61 59
D6 0B 21 F2 E6 1B 1A 07
DF 5E B8 32 17 D5 3E 29
0D 9E AE 47 D7 AF 86 4F
1E 75 6F EA C7 F7 A3 82
56 41 AA E8 02 42 91 D6
08 34 4F 63 40 9B 9C 06
0A 4E 65 30 90 7D 8A 4B
33 D1 50 9A 99 C5 F3 34
D9 A6 E0 2C 33 76 B3 DD
69 DF F9 30 8C 37 3A 51
9A 4F DB 81 81 F7 F5 F9

注意

该程序缺少一些错误检查,并且无法释放分配的内存。此代码不应在生产环境中使用。