二进制和ASCII文件的区别
二进制和ASCII文件的区别
觉得有用的话,欢迎一起讨论相互学习~Follow Me
版权声明:本文为CSDN博主「迂者-贺利坚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sxhelijian/article/details/29594687
Example
#include<iostream>
using namespace std;
int main( )
{
char c[8]="100000";
int n=100000;
cout<<"c="<<c<<endl;
cout<<"n="<<n<<endl;
return 0;
}
运行结果:
c=100000
n=100000
c默认是使用ASCII码进行表示的,即每一位都对应其二进制表示的ASCII码,而n直接使用二进制表示即将这个整数转换成二进制表示数
有图为证。下面是在CodeBlock中单步执行上面的程序时,跟踪c和n的值看到的情形。
字符串的c占用了8个字节,保存的是:1个'1'(ASCII码为49,二进制110001)、5个'0'(ASCII码为48,二进制110000),最后2个字节为'\0'(ASCII码为0)
而整型的n,用4个字节(可以将图中二进制1 1000 0110 1010 0000转成十进制,正好100000。本来4字节32位,前面的0省略了)
将n保存到ASCII文件中
#include<fstream>
using namespace std;
int main( )
{
int n=100000;
ofstream out("a.dat",ios::out);
out<<n<<endl;
return 0;
}
运行这段程序,将n输出到ASCII文件a.dat中
将n保存到二进制文件中
#include<fstream>
using namespace std;
int main( )
{
int n=100000;
ofstream out("b.dat",ios::out|ios::binary);
out.write((char*)&n, sizeof(n));
return 0;
}
- 运行这一段程序,是用对二进制文件写入的方式,将n输出到文件b.dat中。
用记事本打开b.dat文件,如图:
将其视为二进制文件进行查看,使用Binary Viewer,看到的b.txt如下:
文件为4字节大。按高位优先的原则(将图中显示的4个字节由后往前取出来),里面保存的数的十六进制形式是:0x000186A0,展开成二进制形式,自然是1 1000 0110 1010 0000,这恰是十进制数100000在内存中的形式。
用BinaryViewer也看一下a.txt——前文中另一个也是保存100000的文件,只不过,是ASCII文件。查看结果是:
文件共有8个字节,前面的6个字节,保存的是:1个'1'(ASCII码为49,十六进制为31),5个'0'(ASCII码为48,十六进制为30)
由此可以看出二进制文件和ASCII文件的区别:前者,用和内存中一样的方式保存数据;而后者,用和cout显示一样的方式保存,存的是人“看起来”的那个样子。
不方便人看的二进制文件实际上效率更高,用途更广,初学编程的童鞋,不要错过学会它的机会。
附注:将数据使用二进制形式显示出来的方法
在待观察的变量上击鼠标右键,选“Properties”,如下图
在'Format'部分,如下图选择'Binary'后,点击'OK'。
二进制和ASCII文件的区别的更多相关文章
- Linux学习笔记:ftp中binary二进制与ascii传输模式的区别
在使用ftp传输文件时,常添加上一句: binary -- 使用二进制模式传输文件 遂查资料,如下所获. FTP可用多种格式传输文件,通常由系统决定,大多数Linux/UNIX系统只有两种模式:文本 ...
- C语言采用文本方式和二进制方式打开文件的区别分析
稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制 ...
- ftp二进制与ascii传输方式区别
ASCII 和BINARY模式区别: 用HTML 和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错. BINARY模式用来传送可执行文件,压缩文 ...
- 二进制文件和ASCII文件有何区别
二进制文件和ASCII文件(即文本文件)的区别,对于和计算机亲近时间尚短的同学是个难题. 1.一个例子:两种100000 有程序: #include<iostream> using nam ...
- C/C++中二进制与文本方式打开文件的区别
二进制与文本文件主要有两个大的区别: 1.换行符的区别: Windows平台下 对于Windows文本文件,它们使用回车和换行来表示换行符:如果以“文本”方式打开文件,当读取文件的时候,系统会将所有 ...
- c++ 以二进制和以文本方式读写文件的区别
在c++项目开发中,时常涉及到文件读写操作.因此在这里先简单梳理和回顾一下文本模式和二进制模式在进行文件读写上的区别. 1.linux平台下文本文件和二进制文件的读写 在linux平台下进行文件读写时 ...
- Ansi,UTF8,Unicode,ASCII编码的区别
Ansi,UTF8,Unicode,ASCII编码的区别 近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了, 下面全是从网上搜来的: 1. ASCII和Ansi编码 ...
- .c和.h文件的区别(转载)
一个简单的问题:.c和.h文件的区别学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼:子程序不要定义在 ...
- C++学习48 对ASCII文件的读写操作
如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件).程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符. 对ASCI ...
随机推荐
- python+正则+多进程爬取糗事百科图片
话不多说,直接上代码: # 需要的库 import requests import re import os from multiprocessing import Pool # 请求头 header ...
- Linux常用命令学习一
rpm -qa |grep jdk:查询系统中是否有存在jdk的rpm已安装程序: rpm -e --nodeps jdk1.8:卸载jdk1.8的程序: rpm -ivh rpm文件:安装rpm文件 ...
- python笔记37-史上最好用的发邮件zmail
简介 python发邮件之前用的是smtplib,代码太过于复杂,学习成本大,并且很多人学不会.之前专门写过一篇https://www.cnblogs.com/yoyoketang/p/7277259 ...
- 解决SELinux导致Apache更改端口后无法启动的问题
systemctl start httpd # 将Apache的默认端口改为90后,启动Apache时提示失败 systemctl status httpd # 查看Apache的状态 可 ...
- charAt,charCode,fromCharCode区别
1.charAt 返回字符串指定位置的字符 2.charCode 返回字符串指定位置字符Unicode编码 3.fromCharCode 用Unicode编码创建字符串 我们来看下例子 var str ...
- CodeForces - 24D :Broken robot (DP+三对角矩阵高斯消元 随机)
pro:给定N*M的矩阵,以及初始玩家位置. 规定玩家每次会等概率的向左走,向右走,向下走,原地不动,问走到最后一行的期望.保留4位小数. sol:可以列出方程,高斯消元即可,发现是三角矩阵,O(N* ...
- cifar-10数据集的可视化
import numpy as np from PIL import Image import pickle import os CHANNEL = 3 WIDTH = 32 HEIGHT = 32 ...
- 域权限维持:Ptk(Pass The Ticket)
Kerberos协议传送门:https://www.cnblogs.com/zpchcbd/p/11707302.html 1.黄金票据 2.白银票据
- tldr/cheat
tldr 比man好用的查询命令查询工具, man很强大,但是 TLDR,too long dont read 安装 npm install -g tldr 使用说明 其他版本下载 https://g ...
- 干货 | column generation求解VRPTW问题 java代码分享
00 前言 经过小编不断的努力,关于column generation求解VRPTW的代码终于新鲜出炉啦. 01 运行说明 关于这部分的代码,这里提供两个版本. 第一个版本GitHub一个叫Semin ...