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

printing bytes read from binary file at a certain file position C

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

供参考,我真的不知道二进制文件里有什么;但我怀疑它不是正方形。

代码在这里:

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;
}

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

fseek(file, 256, SEEK_SET);

这个程序是一个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

备注

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