二进制数据的读取

二进制数据的读取
二进制数据的读取

二进制数据的读取

使用fread函数可从文件中读取二进制数据,它将每个字节看成整数,并将结果以矩阵形式返回。对于读取二进制文件,fread必须制定正确的数据精度。

fread的基本调用方法是:

A=fread(fid)

其中fid是一个整数型变量,是通过调用fopen函数获得的,表示要读取的文件标识符,输出变量A为矩阵,用于保存从文件中读取的数据。

例如文件test.txt的内容如下:

test it

用fread函数读取该文件,输入如下命令:

>> f=fopen('test.txt','r');

>> answer=fread(f)

answer =

116

101

115

116

32

105

116

输出变量的内容是文件数据的ASCII码值,若要验证读入的数据是否正确,通过下面的命令可以验证。

>> disp(char(ans1'))

test it

fread函数的第二个输入参数可以控制返回矩阵的大小,例如:

>> f=fopen('test.txt','r');

>> answer=fread(f,2)

answer =

116

101

也可以把返回矩阵定义为指定的矩阵格式,例如

>> f=fopen('test.txt','r');

>> an=fread(f,[2 3])

answer =

116 115 32

101 116 105

使用fread函数的第三个输入变量,可以控制fread将二进制数据转成MATLAB 矩阵用的精度,包括一次读取的位数(Number of Bits)和这些位数所代表的数据类型。

常用的精确度类型有下列几种,如表2-6所示。

表2-6 常见的精确度类型

2.4.2 二进制数据的写入

使用fwrite函数可将矩阵按所指定的二进制格式写入文件,并返回成功写入文件的大小。函数的调用方式如下:

count=fwrite(fid,A,precision)

其中,count用来返回写入文件数据的大小,f参数同样是通过fopen函数获得的整数型变量,表示文件标识符,A表示要写入的数据矩阵,第三个参数precision同二进制读取函数的参数一样,表示数据的写入格式。

在下例中fwrite产生一个大小为100字节的二进制文件,它包含了一个5×5阶魔方矩阵,共25个元素,每个元素占用4个字节。

f=fopen('magic5.bin', 'w');

fwrite(f,magic(5), 'int32');

fclose(f)

二进制文件在不同的计算机架构上可能存储方式不同,所以二进制文件存在兼容性问题,而文本文件则不存在这种兼容性问题。不同的存储方式导致在不同架构上保存的二进制文件在另外的平台上无法读取,这主要是因为多字节数据类型在计算机硬件上的存储顺序不同。在MATLAB中,无论计算机上的数据存储顺序是哪一种,都可以读写二进制文件,但要正确地调用fopen函数打开文件。

二进制数

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。 二进制数(binaries)是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。电脑的基础是二进制。在早期设计的常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。 二进制的“00101000”直接可以转换成16进制的“28”。字节是电脑中的基本存储单位,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的十进制数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。 例子: 如十进制10 变二进制 10/2 = 5 余0 5/2 = 2 余1 2 /2 =1 余0 1/2 = 0 余1 计算结束,把余数从后向前写出:1010,即十制10 变为二进制后是1010; 二进制计算与十进制计算类似,只不过是逢二进。以加法为例: 0 + 0 = 0 0+1 =1 1+0 = 0 1+1= 10 //如二进制100 + 101计算 1 0 0 + 1 0 1 ---------- 1 0 0 1 相当于十进制4+5 = 9

关于二进制文件读写的详细解说

先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码:

2中,注意fread的返回值,这个值需要在fwrite的时候将会用到。 后面是关于fopen,fread,fwrite三个函数的详细说明。 fopen(打开文件) 相关函数open,fclose 表头文件#include 定义函数FILE * fopen(const char * path,const char * mode); 函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会 消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内 容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件, 如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会 被保留。 a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文 件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的 内容会被保留。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等 组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非 纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由 fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_I WGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考um ask值。 返回值文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。 附加说明一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误 判断及处理。 范例#include main() { FILE * fp; fp=fopen("noexist","a+"); if(fp= =NULL) return; fclose(fp); } fread(从文件流读取数据) 相关函数fopen,fwrite,fseek,fscanf 表头文件#include 定义函数size_t fread(void * ptr,size_t size,size_t nmemb,FILE * strea m); 函数说明fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参 数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目, 如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错 误发生,这时必须用feof()或ferror()来决定发生什么情况。 返回值返回实际读取到的nmemb数目。 附加说明 范例#include #define nmemb 3 struct test { char name[20]; int size; }s[nmemb]; main() { FILE * stream; int i;

使用文本文件 txt 进行数据存取的技巧总结 相当

使用文本文件txt 进行数据存取的技 巧总结相当 使用文本文件(.txt)进行数据存取的技巧总结 由于本帖内容较多,部分转自他人的心得,因此,凡转贴的地方仅用"--转--"标注,原作者略去,在此对所有原作者表示感谢! 特别说明:由于大家在I/O存取上以txt文件为主,且读取比存储更麻烦(存储的话fwrite,fprintf基本够用),因此下面的讨论主要集中在"txt文件 的读取"上。除了标注了"转"之外,其余心得均出于本人经验之结果,欢迎大家指正、补充。 一.基本知识: --转-- 1.二进制文件与文本文件的区别: 将文件看作是由一个一个字节(byte)组成的,那么文本文件中的每个字节 的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是 打开方式不同,对于这些0和1的处理也就不同。如果按照文本方式打开,在 打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制 方式打开的话,则不会进行任何的translate;最后就是文本文件和二进制文 件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑 的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:

二进制数在经典数学题中的应用-精选教育文档

二进制数在经典数学题中的应用 当代电子计算机的核心之一就是使用二进制数。早在1673年,27岁的德国数学家布莱尼兹在研究计算机模型时就认识到了二进制数的重要性,并系统地提出了二进制数的运算法则。二进制数不仅在电子计算机中得到了广泛的应用,而且在实际生活中也得到了广泛的应用,尤其是在解决一些比较复杂的数学题时,更是发挥了重要的作用。本文笔者简要介绍了一下二进制数的概念以及应用原则,并以两个经典数学题为例分析了二进制数在经典数学题中的应用。 一、二进制数的概念 下面我们以十进制数为例,来认识一下二进制数。十进制数是以十为基底的进位计数制,十进制数是使用0、1、2、3、4、5、6、7、8、9十个有序的数字符号及一个小数点符号来表示的,而且是“逢十进一”,即各相邻位的“权”(所谓权,指的是在进位数制中,为了确定一个数位的实际数值必须乘上的因子)之比都固定为“10”。以此为基础再来看二进制数,从进位计数制的理论观点来看,在所有可能的基底中,二进制数最小的基底是2。在二进制数中,只有数字符号0和1及一个小数点符号,并且是“逢二进一”,各相邻位的“权”之比为“2”。无论是刚才介绍的十进制数还是二进制数,都属于进位计数制,它们各相邻位的“权”之比都是固定的。

二、二进制数的运算规则 二进制数的运算不仅包括算术运算,而且还包括逻辑运算。在算术运算上,二进制数与十进制数一样,同样可以进行加、减、乘、除四则运算。二进制数的逻辑运算则是指对因果关系进行分析的一种运算。逻辑运算的结果并不表示数值大小,而是表示一种逻辑概念。常见的二进制数的逻辑运算有“与”“或”“非”和“异或”4种。 1.二进制数的四则运算法则 加法:0+0=0,0+1=1,1+0=1,1+1=0(向高位进位); 减法:0-0=0,0-1=1(向高位借位),1-0=1,1-1=0; 乘法:0×0=0,0×1=0,1×0=0,1×1=1; 除法:0÷1=0,1÷1=0。 2.二进制数的逻辑运算规则 若干位二进制数组成逻辑数据,位与位之间无“权”的内在联系。对两个逻辑数据进行运算时,每位之间相互独立,运算是按位进行的,不存在算术运算中的进位和借位,运算结果仍是逻辑数据。 与:用符号“∧”来表示0∧0=0,0∧1=0,1∧0=0,1∧1=1; 或:用符号“∨”来表示0∨0=0,0∨1=1,1∨0=1,1∨1=1; 非:常在逻辑变量上面加一横线表示=1,=0; 异或:用符号“”来表示 00=0,01=1,10=1,11=0。 三、二进制数在经典数学题中的应用

二进制文件的读写以及相关心得

二进制文件读写分析 有关TXT文件以及bin文件处理的测试代码 int main() { //fstream file("D:\\test.dat",ios_base::in|ios_base::out|ios_base::app); fstream file; file.open("D:\\test1.dat",ios_base::out); { int temp[10] = {0x11,0x13,0x14,0x1F,0x1D,0x11,0x11,0x12,0x11,0x11}; int temp1[10]; file.write((char *)temp,sizeof(temp)); file.close(); file.open("D:\\test1.dat",ios_base::in); file.read((char *)temp,sizeof(temp)); unsigned int i; cout<

C++中Txt文件读取和写入

C++中Txt文件读取和写入 标签:c++nullstringios文本编辑file 2012-10-07 16:58 45182人阅读评论(3) 收藏举报 分类: C/C++基础(75) C++中Txt文件读取和写入 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用 取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是"fstream," 恭喜你答对了!但这篇文章介绍的方法,我们分别使用"ifstream"?和"ofstream" 来作输入输出。 如果你用过标准控制台流"cin"?和"cout," 那现在的事情对你来说很简单。我们现在开始讲输出部分,首先声明一个类对象。 ofstream fout; 这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。 fout.open("output.txt"); 你也可以把文件名作为构造参数来打开一个文件. ofstream fout("output.txt"); 这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。对不了解控制台输出"cout"的人, 这里有个例子。 int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << "/n"; fout << "Now here is a string: " << name << "/n"; 现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。 回写看起来像另一次输出, 然后调用方法关闭。像这样:

数据库二进制数据流处理

数据流处理 1.从数据库读取数据二进制流创建文件 public static string LoadFile(string filePath, string fileName) { try { if(CreateFolder(System.Environment.CurrentDirectory + filePath)) { if (!System.IO.File.Exists(System.Environment.CurrentDirectory + filePath + @"\" + fileName)) { //创建文件对象以创建文件的形式打开文件 System.IO.FileStream fs = new System.IO.FileStream(System.Environment.CurrentDirectory + filePath + @"\" + fileName, System.IO.FileMode.Create); byte[] Data = new byte[0]; object cell = AppServer.YsServiceBaseClient.DN_YS_SelectDATACELL("YS", fileName); Data = (byte[])cell; //将数组的内容写进文件 fs.Write(Data, 0, Data.Length); //关闭文件 fs.Close(); } } } catch { } //return System.IO.Path.GetFullPath(filePath + @"\" + fileName); return System.Environment.CurrentDirectory + filePath + @"\" + fileName; }

解码labview读写二进制文件格式

解码labview读写二进制文件格式 一直觉得NI 很恶心,最近越发觉得恶心,竟知道骗钱,我花了2 周去探它该死的数据格式,问他们售后居然说不知道...还得我亲自动手...现在把数据格式写下来,为大家做点贡献吧...关于用matlab/vc 读二进制文件write to binary file 的数据NI 可以直接用这个函数把数据写下来,但是读取格式不告诉你,要你用它的软 件去读...读的方法:1) 用uchar 去读,将数据转置存储;2)用浮点去读,倒序;-------- 这些在网上可以查到,下面才是关键.... 对64 位数据:3)每个通道有21 个数据是头文件,即21*64bit 的头信息,可以不去管它,跳过; 4)除了头文件外,每个通道还有1-3 个字节的信息(不知道什么玩意儿),要跳过;具体来讲是这样,如果有6 个通道, 第一个通道存储了1 个字节,要扣除;第2,4,5 个通道多了2 个字节,要扣除;第3,6 通道多了3 个字节要扣除.但是必须从3 开始扣.即假如总共N 字节数据,则第一个通道读N-3 个,接下来2,4,5 要读N-4 个,剩下的3,6 要读N-5 个.只有这样才能正确的读取.不过要注意数据倒序的问题,实际的数据可能正好通道顺序相反.5) 剩下的就是编程的问题了,还有很多细节大家可以自己解决,再看怎么要内存最小,耗时最短...我是没有在NI 的说明文档里面找对相关的数据存储格式,这里是 6 个通道的举例,要是5 个通道又得慢慢试了...再来一句,NI 真恶心,其实没必要 保留数据格式...搞的人家都要用它的软件...tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

巧用二进制编程

巧用二进制数思想编程方法例谈 浙江慈溪实验中学张利波315300 二进制数在计算机中有着非常重要的意义,在信息学竞赛中,巧妙使用二进制数的特点,可能使程序思路更加简洁明了,解题也变得相当简单,下面列举几个程序来说明。 例1、如图所示为一个城市街道简图,小明从A点出发到达B点。如果在每一个路口只能向右或向上走,问小明可有多少条行走路线?并输出每条路线。 问题分析:该题一般的方法可以用深度优先遍历或广度优 编程呢?根据题意,可以通过以下几个方面进行分析: ①行走方向只有两种向右走或向上走,那么我们不妨 用0表示向上走,1表示向左走;②根据路径从A点到B 点,不论走哪条路径,走的步数总是固定的,如图中就是7步,因此,我们可以确定二进制数的位数是7位;③根据行走方向,用“1”表示向右走,据图向右走的步数为4,用二进制数表示又产生一个约束条件,7位二进制数中的“1”的个数为4,同理,“0”的个数为3。 根据以上分析,原题即转换成对7位二进制数的筛选,范围在(0001111)2——(1111000)2之间,且分离各位数字,相加为4,符合上述条件的,即为可以行走的一条路线,要统计所有可行走路线,只要对每个符合条件的线路数量累加即可。参考程序中避免了十进制数转换成二进制数的操作,采用穷举所有7位的二进制数并对此进行筛选完成。参考程序如下。 #include"stdafx.h" #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { time_t begin,end; begin=clock(); int x; int total=0; for(int i=0X0000000F;i<0X00000079;i++) { int x=i; //求i的二进制码中有多少个 x= (x & 0X55555555) + ((x >> 1) & 0X55555555); x= (x & 0X33333333) + ((x >> 2) & 0X33333333); x= (x & 0X0F0F0F0F) + ((x >> 4) & 0X0F0F0F0F);

二进制文件和文本文件的详细以及如何生成二进制文件-推荐下载

二进制文件和文本文件的详细以及如何生成二进制文件? 技术随笔 2010-05-01 19:13:56 阅读226 评论0 字号:大中小订阅 这个问题一直困扰了很多年,可能是我没有认真的去思考。我相信很多人可能和我一样很纠葛,到底编译器也好,汇编器也好是如何工作的呢?到底怎么回事?为什么会运行呢?这是让我们这些看着windows 学习电脑的人真的很难去理解计算机的内部结构。其实,这一切都只是障眼法,下面我就来给大家细细说说我对计算机的理解。 解答1:编译器是怎么回事? 所谓编译器,顾名思义就是将一种文本格式转换成另一种文本格式。比如将字符串echo "hello"; 转换成printf("hello"); 这其实是php语言转成c语言的一种表示。这只是一种简单的描述,其实很大一部分的编译器是将源语言转换成了汇编语言。下面我们来看看 C 语言中的经典hello word,通过gcc编译后生成的汇编是怎么回事。 c语言源码: #include int main() { printf("hello world\n"); } 通过编译器后,编译器把这个翻译成了另一套字符串,其实就是汇编语言: .file "hello.c" .section .rodata .LC0: .string "hello world" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16,%esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $4, %esp movl $.LC0, (%esp) call puts addl $4, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.1.2"

二进制与各种类型的数据转换

二进制与各种类型的数据转换 注:下面所说的都和语言无关,不管是c、c++、c#、java、objective-c,都是一样的。但是不同的语言定义数组的方式不一样,c、c++是这样的:byte temp[],java、c#是这样的:byte []temp。下面定义数组统一byte []temp方式; 1.基本知识 byte[] temp= {0,0,0,0,0,0,0,15}; 在内存中存的是什么 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001111 如何把一个整数转换为byte[]数组,以一个int整数为例; int temp = 0x0F070301; 在内存中存放的16进制数据 0x0f x07 0x03 x01 在内存中存放的10进制数据 15 7 3 1 在内存中存放的2进制数据 00001111 00000111 00000011 00000001 2.整数转byte数组 我要把temp = 0x0F070301;转为byte数组是什么意思呢?先看temp转换为byte数组的结果。 byte[] temp1= {0x0F,0x07,0x03,0x01}; 转换方法: int temp3 = 0x0F070301&0xFF 此时temp3 就等于0x01 int temp3 = (0x0F070301>> 8)&0xFF 此时temp3 就等于0x03 依次类推即可得到数组元素的每个值。 3.byte数组转换为int类型 ●c、c++的转换方式: 如何把一个byte数组转换为int类型。 这种转换在c和c++中最方便,当然在objective-c可以使用c的代码也很方便。 例如有数组 byte temp1[]= {0x0F,0x07,0x03,0x01}; 因为temp1数组的指针,转换方式如下: int* p_temp1 = (int*)temp1; int temp1_value = *p_temp1; 此时temp1_value为0x0F070301 ●其他语言的转换方式: 在所有语言(c、c++、c#、java、objective-c)中,通用的转换方式为: byte temp1[]= {0x0F,0x07,0x03,0x01}; tmp0 =emp1[0]

计算机一级考试复习资料(二进制、基础知识、网络应用、数据库知识解析)

计算机等级一级等级复习资料

理论复习题 (一)计算机基础知识 (1)我国第一台电子计算机诞生于哪一年? A)1948年 B)1958年 C)1966年 D)1968年 【答案】:B 【解析】:我国自1956年开始研制计算机,1958年研制成功国内第一台电子管计算机,名叫103机,在以后的数年中我国的计算机技术取得了迅速地发展。 (2)计算机按照处理数据的形态可以分为 A)巨型机、大型机、小型机、微型机和工作站 B)286机、386机、486机、Pentium机 C)专用计算机、通用计算机 D)数字计算机、模拟计算机、混合计算机 【答案】:D 【解析】:计算机按照综合性能可以分为巨型机、大型机、小型机、微型机和工作站,按照使用范围可以分为通用计算机和专用计算机,按照处理数据的形态可以分为数字计算机、模拟计算机和专用计算机。 (3)与十进制数254等值的二进制数是 A)11111110 B)11101111 C)11111011 D)11101110 【答案】:A 【解析】:十进制与二进制的转换可采用"除二取余"数。 (4)下列4种不同数制表示的数中,数值最小的一个是 A)八进制数36 B)十进制数32 C)十六进制数22 D)二进制数10101100 【答案】:A 【解析】:解答这类问题,一般都是将这些非十进制数转换成十进制数,才能进行统一的对比。非十进制转换成十进制的方法是按权展开 (5)十六进制数1AB对应的十进制数是 A)112 B)427 C)564 D)273 【答案】:A 【解析】:十六进制数转换成十进制数的方法和二进制一样,都是按权展开。 (6)某汉字的国际码是5650H,它的机内码是 A)D6D0H B)E5E0H C)E5D0H D)D5E0H 【答案】:A 【解析】:汉字机内码=国际码+8080H。 (7)五笔型输入法是 A)音码 B)形码 C)混合码 D)音形码 【答案】:B 【解析】:全拼输入法和双拼输入法是根据汉字的发音进行编码的,称为音码;五笔型输入法根据汉字的字形结构进行编码的,称为形码;自然码输入法兼顾音、形编码,称为音形码。 (8)下列字符中,其ASCII码值最大的是 A)STX B)8 C)E D)a 【答案】:D 【解析】:在ASCII码中,有4组字符:一组是控制字符,如LF,CR等,其对应ASCII 码值最小;第2组是数字0~9,第3组是大写字母A~Z,第4组是小写字母a~z。这4组对应的值逐渐变大。字符对应数值的关系是"小写字母比大写字母对应数大,字母中越往后对应的值就越大"。 (9)以下关于机器语言的描述中,不正确的是 A)每种型号的计算机都有自己的指令系统,就是机器语言 B)机器语言是惟一能被计算机识别的语言 C)计算机语言可读性强,容易记忆 D)机器语言和其他语言相比,执行效率高

二进制介绍

二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。 20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。 运算 加法 有四种情况: 0+0=0 0+1=1 1+0=1 1+1=10 0 进位为1 减法 0-0=0,1-0=1,1-1=0,0-1=1。 除法 0÷1=0,1÷1=1。 乘法 有四种情况:0×0=0 1×0=0 0×1=0 1×1=1 优点 (1)容易表示:二进制数只有“0”和“1”两个基本符号,易于用两种对立的物理状态表示。例如,可用"1"表示电灯开关的“闭合”状态,用“0”表示“断开”状态;晶体管的导通表示“1”,截止表示“0”;电容器的充电和放电、电脉冲的有和无、脉冲极性的正与负、电位的高与低等一切有两种对立稳定状态的器件都可以表示二进制的“0”和“1”。而十进制数有10个基本符号(0、1、2、3、4、5、6、7、8、9),要用10种状态才能表示,要用电子器件实现起来是很困难的。 (2)运算简单:二进制数的算术运算特别简单,加法和乘法仅各有3条运算规则

C打开文件 文本方式 二进制方式

C打开文件文本方式二进制方式 2009年11月01日星期日 22:53 Windows平台下 如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"\r\n"转换成"\n";当写入文件的时候,系统会将"\n"转换成"\r\n"写入。 如果以"二进制"方式打开文件,则读/写都不会进行这样的转换。 在Unix/Linux平台下,“文本”与“二进制”模式没有区别。 数据有字符型和非字符型(数)两种。按文本方式写文件指的是将数据转换为对应的字符型数据之后再写入文件。对于字符型数据,由于其本身就是ASCII码字符,一般不必转换,直接写入文件。但是,由于不同的系统对于换行符('\n')有不同的处理(转换)方式,在有的系统(如Windows)下也会对 '\n' 作适当的转换。 对于非字符型数据,都要进行转换处理。例如:int m = 12; 以及 double f = 2.3;,分别按照 "%d"、"%lf" 方式将 m 和 f 写入文件的时候,写入的分别是 '1'、'2' 两个字符以及 '2'、'.'、'3' 等三个字符的ASCII码值。显然,如果按照二进制方式写的话,在文件中一般 m 要占 4 个字节、f 要占 8 个字节。 一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。 从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如 UTF-8),基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。。。大家可以看出来了吧,其编码是基于值的(不定长的,2、4、8字节长的值都有),所以BMP是二进制文件。 二、文本文件与二进制文件的存取 文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流(前面已经说了,存储都是二进制的),然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件流"01000000_01000001_01000010_01000011"(下划线''_'',是我为了增强可读性,而手动添加的),第一个8比特''01000000''按ASCII码来解码的

2位二进制数据比较器实验报告

2位二进制数据比较器实验报告 一实验目的 1.熟悉Quartus II软件的基本操作 2.学习使用Verilog HDL进行设计输入 3.逐步掌握软件输入、编译、仿真的过程 二实验说明 输入信号输出信号 A1 A0 B1 B0 EQ LG SM 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 逻辑表达式: 三实验要求 1、完成2位二进制数据比较器的Verilog HDL程序代码输入并进行仿真 2、采用结构描述方式和数据流描述方式 3、完成对设计电路的仿真验证 A1 A0 EQ B1 comp_2 LG 本次实验是要设计一个2位的二进制数据比较 器。该电路应有两个数据输入端口A、B,每个端口的 数据宽度为2 ,分别设为A0、A1和B0、B1、A0、B0 为数据低位,、B1为数据高位。电路的输出端口分 别为EQ(A=B 的输出信号)、LG(A>B时的输出信号) 和SM(A

四、实验过程 1 程序代码 (1) module yangying(A,B,EQ,LG,SM); input [1:0]A,B; output EQ,LG,SM; assign EQ=(A==B)1'b1:1'b0; assign LG=(A>B)1'b1:1'b0; assign SM=(AB) begin EQ<=1'b1; LG<=1'b0; SM<=1'b0; end else begin EQ<=1'b0; LG<=1'b0; SM<=1'b1; end end endmodule 2 仿真结果

【IT专家】Linux下二进制方式读写文件

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Linux下二进制方式读写文件 2017/03/29 0 最近在做项目需要把内存数据写入到文件中,然后再从文件中以二进制方式读出使用。由于接触Linux开发时间不长,开始询问度娘,度娘的 回答是使用以wb方式打开文件后使用fwrite把数据写入文件,以rb方式打开文件 后使用fread读出数据。下面详细介绍一下相关的函数极其使用说明。需要用的头文件为stdio.h,函数结构为fwrite、fread、fseek、ftell、fstat。1. fwrite size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); 返回:返回实际写入的数据块数目(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;(2)size:要写入内容的单字节数;(3)count: 要进行写入size 字节的数据项的个数;(4)stream: 目标文件指针;(5)返回实际写入的数据项个数count。说明:写入到文件的哪里?这个与文件的打开模式有关,如果是w ,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a ,则从文件的末尾开始添加,文件长度加大。注意:这个函数以二进制形式对文件进行操作,不局限于文本文件2. fread size_t fread(void *buffer, size_t size, size_t count, FILE *stream) ; 返回:返回真实写入的项数,若大于count则意味着产生了错误。另外,产生错误后,文件 位置指示器是无法确定的。若其他stream或buffer为空指针,或在unicode模式中 写入的字节数为奇数,此函数设置errno为EINVAL以及返回0. (1)buffer:用于接收数据的内存地址;(2)size:要读的每个数据项的字节数,单位是字节;(3)count:要读count个数据项,每个数据项size个字节.;(4)stream: 目标文件指针;3. fseek int fseek(FILE * stream,long offset,int whence); 返回:成功返回0,失败返回-1,errno会存放错误代码。(1)stream: 目标文件指针;(2)offset: 相对于whence的偏移量;(3)whence:绝对位置。说明:fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。注意1:参数whence为下列其中一种::

二进制算法

二进制乘法和加法都是通过对二进制数的移位来实现的,移位相当于×2,计算机算根据给出的加法式子与乘法式子算要移多少位。 扩展: 1、二进制数据的表示法 二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,其权的大小顺序为2^2、2^1、2^0、2^-1、2^-2。对于有n位整数,m 位小数的二进制数据用加权系数展开式表示,可写为: (a(n-1)a(n-2)…a(-m))2= a(n-1)×2^(n-1)+a(n-2)×2^(n-2)+……+a(1)×2^1+a(0)×2^0+a(-1)×2^(-1)+a(-2)×2^(-2)+……+a(-m)×2^(-m) 二进制数据一般可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。 注意: 1.式中aj表示第j位的系数,它为0和1中的某一个数。 2.a(n-1)中的(n-1)为下标,输入法无法打出所以用括号括住,避免混淆。 3.2^2表示2的平方,以此类推。 【例1102】将二进制数据111.01写成加权系数的形式。 解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2) 二进制和十六进制,八进制一样,都以二的幂来进位的。 二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。 1. 二进制加法 有四种情况:0+0=0 0+1=1 1+0=1 1+1=10 进位为1

【例1103】求(1101)2+(1011)2 的和解: 1 1 0 1 + 1 0 1 1 ------------------- 1 1 0 0 0 2. 二进制乘法 有四种情况:0×0=0 1×0=0 0×1=0 1×1=1 【例1104】求(1110)2 乘(101)2 之积

fopen , fread fwrite 函数读写二进制文件

fopen , fread fwrite 函数读写二进制文件 1#include 2#include 3int writeFile(const char* _fileName, char* _buf, unsigned int _bufLen) 4{ 5FILE * fp = NULL; 6if( NULL == _buf || _bufLen <= 0 ) return (-1); 7 8 fp = fopen(_fileName, "wb"); // 必须确保是以二进制写入的形式打开 9 10if( NULL == fp ) 11 { 12return (-1); 13 } 14 15 fwrite(_buf, _bufLen, 1, fp); //二进制写 16 17 fclose(fp); 18 fp = NULL; 19 20return 0; 21} 22int readFile(const char* _fileName, char* _buf,unsigned int _bufLen) 23{ 24FILE* fp = NULL; 25if( NULL == _buf || _bufLen <= 0 ) return (-1); 26 27 fp = fopen(_fileName, "rb"); // 必须确保是以二进制读取的形式打开 28 29if( NULL == fp ) 30 { 31return (-1); 32 } 33 34 fread(_buf, _bufLen, 1, fp); // 二进制读 35 36 fclose(fp); 37return 0; 38} 39 40int main(){ 41char * _buf;

运用8421巧记进制转换

运用“8421”巧记进制转换 广东深圳市田东中学 张春卉 在从事计算机教学的过程中,我发现了这样一个问题,在讲解进制转换的时候,很多学生都觉得比较吃力,尤其是二进制与十六进制的转换(其对应关系记起来很烦琐)。教材在这方面也没有一个非常易记的规律。下面就进制转换的问题,谈一下我自己的教学方法。 1. 二进制与十进制的转换 此种转换相对简单一些,其中二进制转为十进制只要按权展开。例:二进制的(10111.101)按权展开为(1×24+0×23+1×22+1×21+1×20+1×2-1+0×2-2+1×2-3),计算结果为十进制的(23.625)。十进制转换为二进制时,整数部分除2取余,结果反序书写,小数部分乘2取整,结果顺序书写。例: 2 87 ------1 0.875 2 4 3 ------1 * 2 2 21 ------1 1.75 ------1 2 10 ------0 0.75 2 5 ------1 * 2 2 2 ------0 1.5 ------1 1 0.5 * 2 1.0 ------1 (87)10=(1010111)2 (0.875)10=(0.111)2 即:(87.875)10=(1010111.111)2 2.二进制与十六进制的转换 在讲转换之前,应让学生搞明白并记牢十六进制中的十六个数字,即:0、1、2、3、4、5、6、7、8、 9、A 、B 、C 、D 、E 、F 。其中,A 、B 、C 、D 、E 、F 分别对应着十进制中的10、11、12、13、14、15。 (1)二进制转换为十六进制: 第一步,打点分组。二进制中相邻的四位数字相当于十六进制中的一位数字,例:(1011)2=(B ) 16 。在分组的时候,以小数点为界(无小数位只计整数部分) ,整数部分从右向左,每四位一组并打点,小数部分从左向右,每四位一组并打点,不足四位补“0”。 例:(10101111010.0011111)2打点后为 (’0101’0111’1010.0011’1110’)2 第二步,转换。这是关键之处。首先让学生记住数字,即“8421”,其得来为(23222120),在二进制转为十六进制,每组分别与“8421”一一对应,对应位为“0”的不计,其余位相加(十进制数),结果转换为十六进制数,小数部分相同。 例:(0101)2=(0+4+0+1)10=(5)10=(5)16 8421 多位十六进制的转换也如此,例: (10101111010.0011111)2=(0101’0111’1010.0011’1110’)2 =[(4+1)’(4+2+1)’(8+2).(2+1)’(8+4+2)’]16=(57A.3E)16 (2)十六进制转换为二进制: 第一步,分组对应。首先将每一位十六进制数转换为十进制数,然后将十进制数转换为“8421”的和的形式,其中含有“8”、“4”、“2”、“1”中任一位的其对应项用“1”表示,否则用“0”代替,并去掉中间的加号,按“8421”顺序书写,即每一位十六进制数对应四位二进制数。 例:(B )16=(11)10=(8+2+1)10=(1011)2 第二步,转换。将每一位十六进制数均与“8421”相对应,并转换为四位的二进制数,最后按十六书写方向 书写 方向

相关文档
最新文档