2015-05-08 4 views
0

Я пытаюсь открыть двоичный файл и прочитать содержимое для назначения класса. Даже после проведения исследований у меня возникают проблемы с появлением чего-либо, появляющегося при попытке открытия и печати содержимого двоичного файла. Я даже не уверен, что мне нужно получить, как проверить, что это правильно, но я знаю, что ничто (это то, что я сейчас получаю) плохо. Вот код, который я получил от поиска на этом сайтеОткрытие двоичных файлов в C

#include<stdio.h> 

int main() 
{ 
    FILE *ptr_myfile; 
    char buf[8]; 

    ptr_myfile = fopen("packets.1","rb"); 
    if (!ptr_myfile) 
    { 
     printf("Unable to open file!"); 
     return 1; 
    } 

    fread(buf, 1, 8, ptr_myfile); 

    printf("First Character: %c", buf[0]); 

    fclose(ptr_myfile); 
    return 0; 
} 

Когда это печатает, я получаю «Во-первых символов:» ничего другого распечатаны. Может быть, он не печатает нормально в терминале? Я не уверен, любая помощь будет принята с благодарностью, спасибо

+0

Кажется, что вы вызываете его правильно. Попробуйте его с текстовым файлом. –

+1

Если вы посмотрите на файл, который вы пытаетесь прочитать с помощью шестнадцатеричного редактора, он покажет вам первый символ. Или вы можете напечатать значение символа вместо того, чтобы пытаться преобразовать его в символ, просто для его проверки - это может быть пробельный символ. Обратите внимание: если вы используете текстовый файл, который закодирован в Unicode, в начале файла может быть отметка порядка байтов. –

ответ

2

Если это двоичный файл, это очень вероятно, что его содержание не печатают особенно хорошо как текст (это то, что делает двоичный двоичный файл). Вместо того, чтобы печатать как символы, попробуйте напечатать как шестнадцатеричные числа:

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

int main() 
{ 
    FILE *ptr_myfile; 
    char buf[8]; 

    ptr_myfile = fopen("packets.1","rb"); 
    if (!ptr_myfile) 
    { 
     printf("Unable to open file!"); 
     return 1; 
    } 

    size_t rb; 
    do { 
     rb = fread(buf, 1, 8, ptr_myfile); 
     if(rb) { 
      size_t i; 
      for(i = 0; i < rb; ++i) { 
        printf("%02x", (unsigned int)buf[i]); 
      } 
      printf("\n"); 
     } 
    } while(rb); 

    fclose(ptr_myfile); 
    return 0; 
} 
2

Во-первых, вам нужно проверить, сколько данных у вас в буфере. fread возвращает длину; если он равен нулю, доступ к buf[0] не является законным.

Не все символы печатаются. Вы можете видеть, какие данные вы получаете, если вы печатаете код символа c, а не c. Используйте для этого %d.

size_t len = fread(buf, 1, 8, ptr_myfile); 
if (len != 0) { 
    printf("First Character: '%c', code %d", buf[0], buf[0]); 
} else { 
    printf("The file has no data\n"); 
} 
Смежные вопросы