Cos'è un file binario?
Un file binario è un file del computer che è diverso da un file di testo. Può contenere dati, come un programma per computer, oppure può essere un file che memorizza dati per l’uso da parte di un programma. In generale, è un codice macchina, compilato dal linguaggio assembly.
come aprire un file binario?
Ci sono alcuni modi diversi per aprire un file binario. Il modo comune è utilizzare l’editor binario: C++ o la funzione API di Windows.
1. Editor di file .bin: Programma C++
Per aprire un file binario con C++, è necessario utilizzare la classe ifstream, che fa parte della libreria standard C++. Per utilizzare questo metodo, è prima necessario includere il file di intestazione fstream. Quindi, è possibile aprire un file binario utilizzando il membro funzione ifstream::open(), passando il nome o il percorso del file come parametro. Ad esempio:
1.1 Apri file bin
/// C++ open bin file
void getBinSize(std::string path)
{
int size = 0;
std::ifstream infile(path, std::ifstream::binary);
infile.seekg(0, infile.end);
int size= infile.tellg();
infile.seekg(0, infile.beg);
infile.close();
printf("\npath=%s,size=%d \n", path, size);
return size;
}
void readBin(std::string path, char *buf, int size)
{
std::ifstream infile(path, std::ifstream::binary);
infile.read(static_cast(buf), size);
infile.close();
}
1.2 Salvataggio file Bin
/// C++ save bin file
void writeBin ( std::string path , char * buf , int size )
{ std::ofstream outfile ( path , std::ifstream::binary );
outfile.write((char *)(buf), size);
outfile.close();
}
1.3 Lettura file Bin
// read binFile
std::string filePath= "./demo.bin";
int size = GetBinSize(filePath);
char *buf= new char[size];
readBin(filePath, buf, size);
float *fbuf = reinterpret_cast(buf);
// write binFile
std::string saveFilePath= "./demo_saved.bin";
writeBin(saveFilePath, buf, size);
delete buf;
2. Funzione API Windows CreateFile()
Un altro modo per aprire un file binario è utilizzare la funzione API Windows CreateFile(). Questa funzione fa parte dell’API Windows, che non fa parte della libreria standard C++. Tuttavia, è possibile utilizzarla nei programmi C++ includendo il file di intestazione Windows.h. La funzione CreateFile() accetta una varietà di parametri, ma i più importanti per aprire un file binario sono il nome o il percorso del file, l’accesso desiderato (ad esempio, GENERIC_READ per la lettura o GENERIC_WRITE per la scrittura) e la modalità di condivisione (ad esempio, FILE_SHARE_READ per consentire ad altri processi di leggere il file mentre il processo lo ha aperto). Ad esempio:
#include Windows.h>
int main()
{
HANDLE file = CreateFile("example.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// ...
}
Errore file binario: "impossibile eseguire errore formato file binario"
L’errore “impossibile eseguire file binario: errore formato Exec” si verifica in genere quando si tenta di eseguire un file binario che non è compatibile con l’architettura del sistema. Ecco un caso per mostrare come risolvere tale problema.
Il seguente è il codice del programma che ho compilato con un cross compiler:
#include
void main()
{
printf("hello arm");
}
Compila su pc:
# arm-linux-gnueabi-gcc -o main main.c
Messaggio di errore durante l’esecuzione su pc:
root@ubuntu:/home/jinxin/app# ./main
bash: ./main: cannot execute binary file: Exec format error
L’attuale pc è di architettura x86 e il file binario appena compilato è in formato arm:
root@ubuntu:/home/jinxin/app# file main
root@ubuntu:/home/jinxin/app# file main
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ec9b455a1c1df94060c7364d0efc42975207fca9, not stripped
Soluzione dell'errore di formato EXEC
Per risolvere questo problema, abbiamo alcune opzioni:
Esegui il file binario su un dispositivo basato su ARM: se hai accesso a un dispositivo basato su ARM, puoi copiare il file binario su quel dispositivo ed eseguirlo lì.
Compila il codice per l’architettura x86: puoi utilizzare un cross-compiler x86 per compilare il codice per l’architettura x86. Per farlo, è necessario installare un cross-compiler x86 sul PC e compilare il codice con esso.
Usa un emulatore: puoi utilizzare un emulatore come QEMU per emulare un dispositivo basato su ARM sul tuo PC basato su x86 ed eseguire il file binario sull’emulatore.
Usa una macchina virtuale: puoi utilizzare una macchina virtuale per emulare un dispositivo basato su ARM sul tuo PC basato su x86 ed eseguire il file binario sulla macchina virtuale.
Nel complesso, la soluzione migliore dipende dal tuo caso d’uso specifico e dalle risorse disponibili.




