2016-06-20 12 views
0

Ich frage mich, wie kann ich eine Datei öffnen (jpg, txt, zip, CPP, ...) als Binärdatei. Ich möchte die Bytes sehen, bevor sie von dem Programm formatiert werden könnten, das normalerweise dieses Dateiformat interpretiert. Es ist möglich? Wie könnte ich das in C++ machen? Danke.eine beliebige Datei als Binärdatei

Antwort

1

Sie können POSIX verwenden (C Art und Weise funktionieren aber in C++) Funktionen, dies zu tun:

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 

int fd = open("file.bin", O_RDONLY); //Opens the file 
if(fd<0){ 
    perror("Error opening the file"); 
    exit(1); 
} 
char buf[1024]; 
int i; 
ssize_t rd; 
for(;;){ 
    rd = read(fd, buf, 1024); 
    if(rd==-1) //Handle error as we did for open 
    if(rd==0) break; 
    for(i = 0; i < rd; i++) 
    printf("%x ", buf[i]); //This will print the hex value of the byte 
    printf("\n"); 
} 
close(fd); 
+0

'read()' 'kehrt ssize_t', nicht "int". –

+0

Sie haben Recht, ich bearbeite – Omar

+0

@Omar - in C++ können Sie auch die Standard-ANSI-C 'fopen()' Schnittstelle verwenden – max66

0

Sie die alte C-Schnittstelle verwenden (fopen(), etc.), aber die C++ Art und Weise basiert auf Datei-Stream : fstream, ifstream, ofstream, wfstream usw.

um im binär-Modus zu öffnen (und Textmodus nicht) können Sie die Flagge std::ios::binary verwenden.

von Beispiel können Sie eine Datei (ein Zeichen zu einem Zeitpunkt) lesen in der folgenden Art und Weise

#include <fstream> 
#include <iostream> 

int main() 
{ 
    char ch; 

    std::ifstream fl("file.log", std::ios::binary); 

    while (fl.read(&ch, sizeof(ch))) 
     std::cout << "-- [" << int(ch) << "]" << std::endl; 

    return 0; 
} 

ps: sorry für mein schlechtes Englisch

Verwandte Themen