打印字节从二进制文件读取到某个文件位置C [关闭]

问题描述 投票:1回答:2

我试图在固定文件位置(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;
}
c io fopen fread
2个回答
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

注意

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


3
投票

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

fseek(file, 256, SEEK_SET);
© www.soinside.com 2019 - 2024. All rights reserved.