【什么是“Binary“二进制文件?】

2024-08-25 20:04
文章标签 二进制 binary

本文主要是介绍【什么是“Binary“二进制文件?】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“Binary”二进制文件是计算机文件的一种形式。部件文件是开发人员编写的源代码文件,还未被编译成可执行的机器代码,通常具有如.c、.cpp、.java 等扩展名对象文件是部件文件经过编译器编译生成的中间文件,包含了部件文件的机器代码和符号表信息,通常扩展名有.o、.obj 等。而二进制文件是经过链接器将多个对象文件和库文件合并生成的最终可执行文件,包含了完整的机器代码,可以直接在特定的操作系统和硬件平台上执行,常见扩展名如.exe、.bin 等。
在这里插入图片描述

代码程序示例

在 C++中,读写二进制文件的示例如下:

void WriteBinaryFile() 
{// 包含头文件// 创建流对象ofstream ofs;// 打开文件ofs.open("person.txt", ios::out | ios::binary);// 写入数据Person p = { "张三",23 };ofs.write((const char*)&p, sizeof(p)); // 关闭文件ofs.close();
}void ReadBinaryFile() 
{// 包含头文件// 创建流对象ifstream ifs;// 打开文件,判断文件是否打开成功ifs.open("person.txt", ios::in | ios::binary);if (!ifs.is_open()) cout <<"文件打开失败。"<< endl;return;// 读取文件Person p;ifs.read((char*)&p, sizeof(Person)); cout <<"姓名:"<< p.m_Name <<", 年龄:"<< p.m_Age <<"。"<< endl;// 关闭文件ifs.close();
}

在 Go 语言中,将 Person 结构体的数据以二进制形式写入文件的示例:

type Person struct {ID   intName stringHeight float64
}func WritePersonToFile(filename string) error {// 创建一个 Person 结构体实例person := Person{ID:    1,Name:  "Tom",Height: 1.8,} // 创建文件file, err := os.Create(filename)if err!= nil {return err}defer file.Close() // 将 Person 结构体实例以二进制形式写入文件err = binary.Write(file, binary.LittleEndian, person)if err!= nil {return err} return nil
}

Binary 二进制文件的组成部分

二进制文件是由数据产生模块生成后,经过存储或传输,由数据分析模块进行分析处理的。其组成部分通常较为复杂。一个典型的二进制文件可能包含若干条记录,每条记录又由若干字段组成,且字段有不同的类型和长度。比如,在通信系统中,二进制文件可能用于编码信息的传输。数据是连续存储的,单条记录通常由记录特征码、记录长度码和记录内容组成。记录特征码是固定长度的,用于标识记录的类型或属性;记录长度码同样是固定长度的,指示记录的长度;记录内容则是实际的数据部分。例如,在存储图像文件时,二进制文件可能会按照特定的格式存储像素信息。

C++读写 Binary 二进制文件的流程

在 C++中,读写二进制文件需要特定的流程。首先,在打开文件时,要将文件类型定义为二进制文件(ios::binary),否则默认是以文本文件形式打开,读写操作会进行文本格式转换。写入二进制文件时,使用 fstream 类的 ofstream 对象,以输出方式打开文件。例如:

#include <fstream>
using namespace std;
int main() {fstream fs("example.dat", ios::out | ios::binary);if (fs.is_open()) {int data(3) = {1,2, 3};fs.write(reinterpret_cast<const char*>(&data), sizeof(data));fs.close();} else {cout << "Unable to open file for writing" << endl;}return 0;
}

读取二进制文件时,使用 ifstream 类型打开文件,并通过 read 方法读取数据。

Go 语言写入 Binary 二进制文件的方法

在 Go 语言中,可以使用 encoding/binary 包中的 Write 函数来实现对二进制数据的写入操作。首先,创建一个包含多种数据类型的结构体,然后定义一个函数,通过该函数将结构体的数据以二进制形式写入到指定的文件中。例如:

package mainimport ("bytes""encoding/binary""fmt""os"
)type Person struct {ID   intName stringAge  int
}func WritePersonToFile(filename string) error {person := Person{ID:   1,Name: "Tom",Age:  18,}file, err := os.Create(filename)if err!= nil {return err}defer file.Close()var buf bytes.Buffererr = binary.Write(&buf, binary.LittleEndian, person)if err!= nil {return err}_, err = file.Write(buf.Bytes())if err!= nil {return err}return nil
}func main() {filename := "person.bin"err := WritePersonToFile(filename)if err!= nil {fmt.Println("Error:", err)return}fmt.Println("Write to", filename, "successfully")
}

Binary 二进制文件在不同语言中的应用

二进制文件在多种编程语言中都有广泛的应用。在 Java 中,有时需要将图片文件转换成二进制数据以便在网络上传输或存储到数据库中。在 C++中,常用于处理图像、音频等非文本数据。在 Go 语言中,可用于网络通信、数据存储等场景。例如,在网络通信中,二进制文件可以更高效地传输数据,减少数据量和传输时间。

Binary 二进制文件的特点

二进制文件具有诸多特点。首先,它的数据存储方式高效,不进行编码转换,能够直接存储和读取原始的二进制数据,这确保了数据的准确性和完整性。其次,二进制文件适合存储大文件,如高分辨率的图像、音频和视频等,能够高效利用存储空间。再者,由于其不依赖于特定的字符编码,所以在跨平台和跨系统的环境中具有更好的兼容性。例如,一个大型的视频文件,如果以二进制形式存储,能够准确无误地保存每一帧的图像信息,而不会因为编码问题导致数据丢失或损坏。

综上所述,“binary”二进制文件在计算机编程和数据处理中具有重要地位,其高效、准确和兼容性强等特点使得它在各种应用场景中发挥着关键作用。通过不同编程语言提供的相应功能和方法,能够实现对二进制文件的读写和操作,满足各种数据处理和存储的需求。

这篇关于【什么是“Binary“二进制文件?】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106526

相关文章

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

通信工程学习:什么是2ASK/BASK二进制振幅键控

2ASK/BASK:二进制振幅键控         2ASK/BASK二进制振幅键控是一种数字调制技术,其全称是二进制振幅键控(Binary Amplitude Shift Keying)。该技术通过改变载波的振幅来传递二进制数字信息,而载波的频率和相位则保持不变。以下是关于2ASK/BASK二进制振幅键控的详细解释: 一、2ASK/BASK二进制振幅键控的基本原理 1、振幅键控:

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1:输入:a = "11", b = "1"输出:"100"示例 2:输入:a = "1010", b = "1011"输出:"10101" 算法设计 可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对

226 Invert Binary Tree

//226 Invert Binary Tree//算法思路:主要使用递归算法public class Solution {public TreeNode invertTree(TreeNode root) {//1 出口 空节点if (root==null)return null;//2 递归 调用自己TreeNode left = root.left;TreeNode right = ro

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制,我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充0?StringBuil

二进制的匹配问题

最近做了点搜索和背包的题目,发现这个二进制的匹配很是好用,所以写一篇二进制的匹配来作为自我总结; 首先我们要知道二进制的运算符,和他们的运算规则; ABA&BA|BA^B00000010111001111110 运算符有三种‘&’ , ‘|’ ,  ‘^'  或,且,异或,运算的规则在表中可以看到,想想这个规则我们可以做很多事情! 首先,每个十进制的数都会对应一个唯一的二进

二进制方式安装Helm

二进制方式安装Helm 官网:https://helm.sh/ 1、下载安装包 wget -L https://get.helm.sh/helm-v3.16.0-rc.1-linux-amd64.tar.gz 2、解压 tar -xf helm-v3.16.0-rc.1-linux-amd64.tar.gz 3、移动到/usr/local/bin/目录下 mv linux-am

输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。

/*** 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。* 思路:第一步求这两个数的异或,第二步统计异或结果中1的位数*@author: Administrator*@date: 2017-1-13 下午09:39:25*/import java.util.Scanner;public class Solution4 {public int CountDifference

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

[LeetCode] 863. All Nodes Distance K in Binary Tree

题:https://leetcode.com/problems/all-nodes-distance-k-in-binary-tree/ 题目大意 求给树中,距给定 结点 指定长度的 所有结点的val 思路 tree -> graph 、 bfs 先遍历树,并用map记录每个结点的父结点 ,将树变为图,然后 bfs。 /*** Definition for a binary tree