Binary Files Explained: How to Open & Use

What is a Binary file?

A binary file is a computer file that is different form a text file. It may contain data, like a computer program, or it may be a file that stores data for a program to use. In generally, it is a machine code, compilated by the assembly language.

how to open binary file?

There are a few different ways to open a binary file. The common way is to use the Binary Editor: C++ or Windows API function.

1.bin file Editor: C++ Programm

To open a binary file with C++, you need to use the ifstream class, which is part of the standard C++ library. To use this method, you first need to include the fstream header file. Then, you can open a binary file by using the ifstream::open() member function, passing in the name or path of the file as a parameter. For example:

1.1 Open bin file

				
					/// 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<char *>(buf), size);
infile.close();
}
				
			

1.2 Saving Bin File

				
					/// 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 Reading Bin File

				
					// read binFile
std::string filePath= "./demo.bin";
int size = GetBinSize(filePath);
char *buf= new char[size];
readBin(filePath, buf, size);
float *fbuf = reinterpret_cast<float *>(buf);

// write binFile
std::string saveFilePath= "./demo_saved.bin";
writeBin(saveFilePath, buf, size);

delete buf;
				
			

2. Windows API function CreateFile()

Another way to open a binary file is to use the Windows API function CreateFile(). This function is part of the Windows API, which is not part of the C++ standard library. However, you can use it in your C++ programs by including the Windows.h header file. The CreateFile() function takes a variety of parameters, but the most important ones for opening a binary file are the file name or path, the desired access (for example, GENERIC_READ for reading or GENERIC_WRITE for writing), and the share mode (for example, FILE_SHARE_READ to allow other processes to read the file while your process has it open). For example:

				
					#include Windows.h>

int main()
{
HANDLE file = CreateFile("example.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// ...
}
				
			

Binary File Error: "cannot execute binary file exec format error"

The “cannot execute binary file: Exec format error” error typically occurs when you try to run a binary file that is not compatible with your system’s architecture. Here’s a case to show how to solve such problem.

The following is the program code I compiled with a cross compiler:

				
					#include <stdio.h>
void main()
{
   printf("hello arm");
}
				
			

Compile on pc:

				
					# arm-linux-gnueabi-gcc -o main main.c
				
			

Error message when running on pc:

				
					root@ubuntu:/home/jinxin/app# ./main
bash: ./main: cannot execute binary file: Exec format error
				
			

The current pc is of x86 architecture, and the binary file just compiled is in arm format:

				
					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
				
			

Solution of EXEC Format Error

To solve this issue, we have a few options:

Run the binary file on an ARM-based device: If you have access to an ARM-based device, you can copy the binary file to that device and run it there.

Cross-compile the code for x86 architecture: You can use an x86 cross-compiler to compile the code for the x86 architecture. To do this, you need to install an x86 cross-compiler on your PC and compile the code with it.

Use an emulator: You can use an emulator such as QEMU to emulate an ARM-based device on your x86-based PC and run the binary file on the emulator.

Use a virtual machine: You can use a virtual machine to emulate an ARM-based device on your x86-based PC and run the binary file on the virtual machine.

Overall, the best solution depends on your specific use case and available resources.

Share to:

Scroll to Top

Instant Quote