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

news2024/9/21 0:39:11

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

链表OJ题——环形链表2

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 环形链表2 题目描述&#xff1a;在链表有环的基础上&#xff0c;找出环的入口点。 二、解题思路 三、解题代码

移动端爬虫学习记录

免责声明 本文旨在探讨移动端爬虫技术的应用和挑战&#xff0c;仅供教育和研究用途。请确保在合法合规的框架内使用爬虫技术&#xff0c;遵循相关法律法规和网站的使用条款。作者不对因使用本文内容而产生的任何法律或安全问题承担责任。 1、初识移动端爬虫 学习移动端爬虫的原…

.NET 开发的高性能内网穿透工具

目录 前言 什么是NSmartProxy&#xff1f; 项目特点 运行原理 客户端安装 服务端安装 使用案例 项目地址 最后 前言 在许多情况下&#xff0c;我们需要从外部网络访问内部网络中的服务&#xff0c;比如家里的服务器或者公司的内部资源。这时内网穿透工具就可以帮助我们…

【吊打面试官系列-Memcached面试题】什么是二进制协议,我该关注吗?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是二进制协议&#xff0c;我该关注吗&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是二进制协议&#xff0c;我该关注吗&#xff1f; 关于二进制最好的信息当然是二进制协议规范&#xff1a; 1000道 互…

【AI+编程】只需1句提示词0代码生成前端展示效果

最近被Vercel发布的V0 编程效果惊艳到了&#xff0c; 不管是前端开发 还是立志成为全栈工程师的 同学&#xff0c;不可错过。 官网地址&#xff1a;https://v0.dev/chat/ 代码生成工具很多&#xff0c;不管是github copilot、阿里的通义灵码&#xff0c; 腾讯云的AI代码助手…

python 多进程 多线程 程序

这个纯粹为了增加理解&#xff0c;将很多比较好的资料进行归纳总结。 1、理论汇总 并发和并行 image.png 多进程和多线程 同步和异步 同步&#xff1a;所谓同步&#xff0c;就是在发出一个功能调用时&#xff0c;在没有得到结果之前&#xff0c;该调用就不会返回。 异步…

027集—CAD中批量删除多段线重复点、距离过近点——vba代码实现

cad图中多段线存在重复点、或距离过近点&#xff0c;可通过vba插件一键删除。 &#xff08;精度可人工设定&#xff0c;例如精度设置0.001&#xff1a;小于0.001 的点视为重复点&#xff0c;删除此点。&#xff09; 如下图&#xff1a; 如下图&#xff1a; 大量重复点和距离…

【Gaussian splatting系列学习】(三)

3DGS系列&#xff08;一&#xff09; 3DGS系列&#xff08;二&#xff09; 3DGS系列&#xff08;三&#xff09; 3D高斯球的颜色 基函数&#xff1a; 任何一个周期性函数可以分解为正弦和余弦的线性组合 球谐函数&#xff1a; 任何一个球面坐标的函数可以用多个球谐函数来近…

FPGA开发——在线调试工具Signal Tap的使用

一、简介 在我们进行FPGA进行开发时通常都会经历代码编写&#xff0c;仿真&#xff0c;下板验证等过程。使用FPGA进行开发的小伙伴都知道&#xff0c;在代码编写时往往花费不了太长的时间&#xff0c;下板验证更是。在开发中占绝大部分时间的是仿真&#xff0c;有时候编写代码只…

C++类和对象(下):初始化列表、explicit关键字、友元函数、友元类

文章目录 C类和对象9、初始化列表9.1构造函数体赋值9.2初始化列表9.3 explicit&#xff08;显示&#xff09;关键字 10、友元10.1友元函数10.2友元类 C类和对象 9、初始化列表 一个类的构造函数要初始化成员变量有两种方式&#xff0c;一种是构造函数体赋值&#xff0c;另一种…

【C++二分查找】2817. 限制条件下元素之间的最小绝对差

本文涉及的基础知识点 C二分查找 LeetCode2817. 限制条件下元素之间的最小绝对差 给你一个下标从 0 开始的整数数组 nums 和一个整数 x 。 请你找到数组中下标距离至少为 x 的两个元素的 差值绝对值 的 最小值 。 换言之&#xff0c;请你找到两个下标 i 和 j &#xff0c;满…

python应用之内置hashlib库的哈希算法介绍

hashlib 是 Python 的一个内置模块&#xff0c;提供了像 SHA1, SHA256, MD5 等哈希算法。可以接受任意长度的字节数据作为输入&#xff0c;并输出一个固定长度的“哈希值”&#xff0c;通常用于校验数据的完整性。而且该算法是不可逆的&#xff0c;不能通过哈希值反算出原始数据…

zookeeper服务搭建

zookeeper服务搭建 前言1. 前置准备2. 下载和解压Zookeeper3. 配置环境变量4. 编辑Zookeeper配置文件5. 配置Zookeeper节点ID6. 配置好的Zookeeper分发到其他节点7. 启动Zookeeper集群参考博客 前言 Zookeeper是一个开源的分布式协调服务&#xff0c;主要用于解决分布式应用中的…

【Excal】OR 函数

语法&#xff1a; OR&#xff08;判断条件1&#xff0c;判断条件2&#xff0c;判断体件3&#xff0c;****&#xff09; 评优条件&#xff1a; 语文成绩高于90 数学成绩高于90 英语成绩高于85 物理成绩高于85 点击回车键 选中填充 回车 选中填充

echart legend 的使用及离开界面图表全局销毁

父组件 <template><AbnormalAlarmStatistics ref"abnormalAlarmStatistics" /> </template> <script setup> import {ref,reactive,computed,onMounted,getCurrentInstance,watch } from "vue";const { proxy } getCurrentInsta…

CentOS Docker搭建Mysql5.7集群

MySQL Replication MySQL提供了Replication功能&#xff0c;可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库&#xff08;master&#xff09;&#xff0c;后者则被称从库&#xff08;slave&#xff09;。MySQL复制过程采用异步方式&#xff0c;但延时非常…

图解Redis五大数据类型

五种数据类型的不同之处&#xff0c;是value在存储时的形式不同。 hash类型 value类型是<key,value>键值对。如果发生hash冲突&#xff0c;用开放定址法解决&#xff0c;不拉链&#xff01; key值重复&#xff0c;则新值覆盖旧值 List类型 Set类型 与List的类似&…

嵌入式Keil工具【微库】和【标准库】的对比

我们在学习或者用单片机做开发的时候,输出信息以及打印调试基本都会有用的 printf 函数,那么,这个时候基本都会用到【微库】。 如果使用 Keil 软件,就会勾选配置中的微库(MicroLib),如下图: 同样,在IAR、 e2 studio等开发单片机的集成开发环境中,也有类似的配置选项。…

电脑远程监控桌面软件集锦|(2024全网优秀资源整理!)

电脑远程监控桌面软件在企业管理和个人应用中扮演着重要的角色。 这些工具可以帮助企业提升工作效率、保护数据安全&#xff0c;同时也能在个人使用时提供便利。 以下是几款优秀的电脑远程监控桌面软件及其主要功能介绍&#xff1a; 1中科安企 特点&#xff1a;一款备受企业…

2024年第十五届蓝桥杯图形化省赛真题分享包含答案

Scratch初级:8月24日9:30-11:00 Scratch中级:8月24日14:00-15:30 Python:8月25日9:30-11:00 C++:8月25日14:00-15:30 这次考了哪些内容呢,我们来大概看看(编程题没有答案,编程题有,大家可以评论群留言单选题的答案):