C语言_二进制文件

Ustinain 等级 729 0 0

二进制文件

其实所有文件最终都是二进制的

想想我们之前printf()一个整数的时候,实际上是把这个整数格式化了,变成了可以见的形式,就像1,2,3,4,5,6在计算机里不是以1,2,3,4,5,6的形式的,而是二进制存储的,是以四个字节表示这个些1,2,3,4,5,6,而不是六个字节

当我们输入这些数字1,2,3,4,5的时候,实际上输入的是个字符串,这个字符串里面有1,2,3,4,5这个五个字符,那scanf()做的是什么,为什么不叫read,因为它不是直接输入我们输入的值,而是扫描、识别这个字符串,从中识别整数,从而填入那个整数变量里去。
这些输入输出都是都是文本形式的,还有一种二进制的形式,其实也不神秘,从某种意义上说所有文件最终都是二进制的,文本文件也是二进制的,只不过文本文件表现为人可以读的形式而已,文本文件无非可以用简单的形式读写,可以用more、tail、cat等打开文本文件,编辑修改可以用vim等等

而二进制文件需要专门的程序来读写文件

像是.mp3 |.mp4|.jpg等等文件需要专门的工具,你用more打开一个mp3文件是得不到任何有用的东西

文本 VS 二进制

  • 最早的Unix系统喜欢用文本文件来做数据存储和程序配置

    只要有more,vi就可以打开我想要打开的文件

  • 交互式终端的出现(在linux之前)使得人们喜欢用文本和计算机“交谈”

    我输入命令ls 终端给我显示当前目录下所有文件,这是一种交谈,很显然这交谈是文本显示的,我输入的是文本,它显示给我的也是文本,

  • Unix的shell提供了一些读写文本的小程序

  • Windows喜欢用二进制文件

  • DOS是草根文化,不继承和熟悉Unix文化

Windows是一个完全不同的文化背景,在70年代末-80年代初,,个人计算机是个突破”围墙“的东西革命性的东西,那时候的人还不知道在“围墙”里的linux是怎么样工作的,只是凭借着对计算机硬件的理解,来决定这个计算机的软件该怎么做,pc刚开始的时候能力有限,DOS能力也有限,而用二进制更接近底层。

  • 文本的优、劣势

文本的优势是方便人类读写,可以跨平台,在另一个平台也能轻易识别文本
文本的缺点就是程序输入和输出的时候需要经过格式化,这样计算量会变大

  • 二进制的优、劣势

二进制的缺点是人类读写困难,刚好和文本相反,全是0和1,压根识别不了,最重要的是不跨平台,int等类型的大小不一样,存储数据方式:大小端的问题

二进制优点就是程序读写快,计算转换量小,(因为它看的懂呀)

程序为什么要文件

  • 配置

Unix喜欢把所有的配置文件全部存入文本文件里,然后使用vi可以更改配置。
Windows就不一样,它把所有配置数据写入注册表里,他是一个非常大的二进制文件,计算机上的所有程序数据都在这个里面,使用特定的软件来编辑

  • 媒体

这个只能是二进制的,而现实确实,程序通过第三方库来读写文件,很少直接读写二进制文件了

可移植性

  • 这样的二进制文件不具有可移植性

    在int为32位的机器上写成的数据文件,无法直接在int为64位的机器上正确读出,因为你本来是4个字节的一个数据,而int为64为机器直接,八个字节一砍,很显然就读错了。
    解决的防止一是放弃使用int,而是typedef,具有明确大小的类型

  • 更好的方案是使用文本

在互联网里传输数据 为了解决数据类型变化的不同,大小端存储的不同,放弃的运行速度而改用文本、文本就可以很好解决这个问题,人们已经很少利用C语言的底层的文件读取方式来操作数据了,要么使用数据库,要么使用第三方库。

由于作者的能力水平有限,仅表达个人见解,若有纰漏,望指正,一起进步!

本文转自我的个人博客 https://blog.csdn.net/Ustinian_116/article/details/114783972

收藏
评论区

相关推荐

C++概述
概述 C 是静态,可编译,通用,大小写敏感,格式自由的编程语言,它支持程序化,面向对象的,和泛型编程方式。 C 被看作是中间层语言,因为它同时包含了低级语言和高级语言的特性。 C 是于 1979 年在新泽西的茉莉山丘的贝尔实验室由 Bjarne Stroustrup 开发的,它是 C 语言的加强版,最开始它被称作 “C with Classes”,但是
C++ 基本语法
C 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 对象具有状态和行为。例如:一只狗的状态 颜色、名称、品种,行为 摇动、叫唤、吃。对象是类的实例。 类 类可以定义为描述对象行为/状态的模板/蓝图。 方法 从基本上说,一个方法表示一种行为。一个类可以包含多个
c++11 实现单例模式
C11出来后,里面新增加了好多好用的功能 下面的单例就是使用了C11中的标准库中的mutex和unique_prt 进行内存管理的. 此单例模式不用担心内存的释放问题 pragma once include <memory include <mutex template <class T class Singleton { public: ty
C语言_练习题(一)
前言: 看懂理解代码很容易,难的是把所理解的融会贯通,融合到实例中,你会发现事实和理论会有些许差别,编写实例能更好的帮你积累经验。 0x1 编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符。 代码: include <stdio.h int main(){ char i; printf("请输入一个ASCI
我的C语言基础
C语言32个关键字auto 声明自动变量short 声明短整型变量或函数int 声明整型变量或函数long 声明长整型变量或函数float 声明浮点型变量或函数double 声明双精度变量或函数char 声明字符型变量或函数struct 声明结构体变量或函数union 声明共用数据类型enum 声明枚举类型typedef 用以给数据类型取别名co
C语言基础习题50例(一)1-5
虎为百兽尊,罔敢触其怒。惟有父子情,一步一回顾。 习题1 有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?实现思路:显然,这个题目需要用到循环,并且是循环嵌套,先列出所有可能的组合,再去掉重复的组合即可。代码如下:cinclude <stdio.hint main(){ int i, j, k,
游戏安全实践的一些思考
移动的游戏能够稳定健康的上线。主要需要依赖以下在四个方面:1.前端展示,或者说客户端正常运行。性能稳定不崩溃,不过热能够稳定运行。2.后端,或者游戏后台服务端的。不但要稳定。还有能在有限的服务器资源下,能承受大量的同时在线用户。而且要让游戏中的每个模块都能够承受承受大量的同时在线用户。3.安全也是重点之中。这既包括客户端,又包括服务端。客户端的安全,包括要防
C 如何判断编译器是否支持C90 C99?
参考:《C Primer Plus》,Stephen Prata著,姜佑译。 ANSI/ISO C标准 美国ANSI成立委员会X3J11,于89/90年,99年,11年,发布C标准:C89/C90,C99,C11。 **ANSI/ISO 各版本C标准** **C标准** **描述** 经典C 也称K&R C,87年K&R著作《C语言程序设计》,
C++
第一眼见到explicit和volatile可能会一愣一愣的觉得可能是c11或者c14新加的标识符。 其实不是这样,volatile和const两个关键字在C语言的第二个版本KR C的时候就被加入了C标准,他们是两个相对的关键字 const 修饰符表示这是一个常量类型,这个变量的值不会被程序改变 volatile 修饰符表示这个
C++11新特性学习
1、什么是C+11 ========= C++11标准为C++编程语言的第三个官方标准,正式名叫ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++。在正式标准发布前,原名C++0x。它将取代C++标准第二版ISO/IEC 14882:2003 - Progr
C++学习_从C到C++
### 一、引用的概念和应用 * * * ####  1.引用的概念 下面写法定义了一个引用,并将其初始化为引用某个变量。 类型名 & 引用名 = 某变量名; int n = 4; int & r = n; // r引用了n,r的类型是 int & 某个变量的引用,等价于这个变量,相当于该变量的一个别
C++学习建议
// 转载 C++学习建议 C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。个人认为,学习C++可分为4个层次: 第一层次:C++基础:挑选一本入门书籍,如《C++ Primer》、《C++大学教程》、或Stro
4.python
#一 > **编写一个函数判断输入的三个数是否能构成三角形** **我写的函数** def is_triangle(a, b, c): if (a+b>c and abs(a-b)<c) or (a+c>b and abs(a-c)<b) or (b+c>a and abs(b-c)<a): return
C++ Modern C++
        现代的C++,比较笼统。最近10多年的东西是否是现代的呢?我认为“时髦”这个词更准确一些。每个年代,时髦总是标新立异的,总是被年龄大一些的人看不惯的(虽然这些人也曾经“赶过时髦”)。Modern C++就是用最时髦的东西去装饰您的代码。但是本质的东西还是没有变。改革初期,最时髦的服饰是喇叭裤,霹雳舞手套。那时没有智能手机,时髦的人扛着一台卡带
Emacs 学习笔记
1.  C-v  向下翻页 2.  M-v 向上翻页 3.  C-l   将光标位居中 4.  C-n  下一行 next 5.  C-p  上一行 previous 6.  C-b   光标backward 7.  C-f    光标forward 8.  M-f