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
0
A
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
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
'read()' 'kehrt ssize_t', nicht "int". –
Sie haben Recht, ich bearbeite – Omar
@Omar - in C++ können Sie auch die Standard-ANSI-C 'fopen()' Schnittstelle verwenden – max66