¿Qué es un archivo binario?
Un archivo binario es un archivo informático diferente de un archivo de texto. Puede contener datos, como un programa informático, o puede ser un archivo que almacena datos para que los utilice un programa. En general, se trata de un código máquina, compilado por el lenguaje ensamblador.
¿Cómo abrir un archivo binario?
Hay varias formas de abrir un archivo binario. La forma más habitual es utilizar el editor binario: C++ o la función API de Windows.
1. Editor de archivos bin: programa C++
Para abrir un archivo binario con C++, es necesario utilizar la clase ifstream, que forma parte de la biblioteca estándar de C++. Para utilizar este método, primero hay que incluir el archivo de encabezado fstream. A continuación, se puede abrir un archivo binario utilizando la función miembro ifstream::open(), pasando el nombre o la ruta del archivo como parámetro. Por ejemplo:
1.1 Abrir archivo 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 Guardar archivo de papelera
/// 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 Lectura del archivo 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. Función CreateFile() de la API de Windows
Otra forma de abrir un archivo binario es utilizar la función CreateFile() de la API de Windows. Esta función forma parte de la API de Windows, que no pertenece a la biblioteca estándar de C++. Sin embargo, puede utilizarla en sus programas C++ incluyendo el archivo de encabezado Windows.h. La función CreateFile() admite diversos parámetros, pero los más importantes para abrir un archivo binario son el nombre o la ruta del archivo, el acceso deseado (por ejemplo, GENERIC_READ para leer o GENERIC_WRITE para escribir) y el modo de uso compartido (por ejemplo, FILE_SHARE_READ para permitir que otros procesos lean el archivo mientras su proceso lo tiene abierto). Por ejemplo:
#include Windows.h>
int main()
{
HANDLE file = CreateFile("example.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// ...
}
Error de archivo binario: «No se puede ejecutar el archivo binario. Error de formato de ejecución».
El error «No se puede ejecutar el archivo binario: error de formato Exec» suele producirse cuando se intenta ejecutar un archivo binario que no es compatible con la arquitectura del sistema. A continuación se muestra un caso que ilustra cómo resolver este problema.
El siguiente es el código del programa que compilé con un compilador cruzado:
#include
void main()
{
printf("hello arm");
}
Compilar en PC:
# arm-linux-gnueabi-gcc -o main main.c
Mensaje de error al ejecutar en el ordenador:
root@ubuntu:/home/jinxin/app# ./main
bash: ./main: cannot execute binary file: Exec format error
El ordenador actual tiene una arquitectura x86, y el archivo binario que acabamos de compilar está en 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
Solución del error de formato EXEC
Para resolver este problema, tenemos varias opciones:
Ejecutar el archivo binario en un dispositivo basado en ARM: si tienes acceso a un dispositivo basado en ARM, puedes copiar el archivo binario a ese dispositivo y ejecutarlo allí.
Compilar de forma cruzada el código para la arquitectura x86: puede utilizar un compilador cruzado x86 para compilar el código para la arquitectura x86. Para ello, debe instalar un compilador cruzado x86 en su PC y compilar el código con él.
Utilizar un emulador: puede utilizar un emulador como QEMU para emular un dispositivo basado en ARM en su PC basado en x86 y ejecutar el archivo binario en el emulador.
Utilizar una máquina virtual: puede utilizar una máquina virtual para emular un dispositivo basado en ARM en su PC basado en x86 y ejecutar el archivo binario en la máquina virtual.
En general, la mejor solución depende de su caso de uso específico y de los recursos disponibles.




