【什么是“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   int
    Name string
    Height 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 main

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "os"
)

type Person struct {
    ID   int
    Name string
    Age  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.Buffer
    err = 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”二进制文件在计算机编程和数据处理中具有重要地位,其高效、准确和兼容性强等特点使得它在各种应用场景中发挥着关键作用。通过不同编程语言提供的相应功能和方法,能够实现对二进制文件的读写和操作,满足各种数据处理和存储的需求。

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值