当前位置:首页 » 编程语言 » c语言读写以二进制

c语言读写以二进制

发布时间: 2025-09-29 15:07:17

‘壹’ 怎样用c语言读取txt文件中的二进制数据并转为一维数组

使用read()函数以下为网络的介绍

函数名:read
功 能:从文件中读
函数原型 :int read(int handle, void *buf, int nbyte);
表头文件:#include <unistd.h>
函数说明:read()会把参数handle所指的文件传送nbyte个字节到buf指针所指的内存中。若参数nbyte为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或无可读取的数据。
程序例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(10);
/*
Looks for a file in the current directory named TEST.$$$ and attempts
to read 10 bytes from it. To use this example you should create the
file TEST.$$$
*/
if ((handle =
open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
if ((bytes = read(handle, buf, 10)) == -1) {
printf("Read Failed.\n");
exit(1);
}
else {
printf("Read: %d bytes read.\n", bytes);
}
return 0;
}
2Linux C
编辑

定义函数
ssize_t read(int fd, void *buf, size_t count);
返回值
成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。
参数
参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。比如用fgetc读一个字节,fgetc有可能从内核中预读1024个字节到I/O缓冲区中,再返回第一个字节,这时该文件在内核中记录的读写位置是1024,而在FILE结构体中记录的读写位置是1。注意返回值类型是ssize_t,表示有符号的size_t,这样既可以返回正的字节数、0(表示到达文件末尾)也可以返回负值-1(表示出错)。
read函数返回时,返回值说明了buf中前多少个字节是刚读上来的。有些情况下,实际读到的字节数(返回值)会小于请求读的字节数count,例如:读常规文件时,在读到count个字节之前已到达文件末尾。例如,距文件末尾还有30个字节而请求读100个字节,则read返回30,下次read将返回0。

‘贰’ C语言文件 "w+"与"wb+"区别

w+以纯文本方式读写,而wb+是以二进制方式进行读写。

mode说明:

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失若不存在则建立该文件。

wb 只写方式打开或新建一个二进制文件,只允许写数据。

wb+ 读写方式打开或建立一个二进制文件,允许读和写。

计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别不在于物理存储上,而是逻辑上的不同。即编码格式的不同,文本文件用的是字符编码,例如ASCII编码(定长),二进制文件是基于值编码,用的是二进制的方式来存放数据的(变长)。

(2)c语言读写以二进制扩展阅读

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

‘叁’ c语言中rb+什么意思

在C语言中,rb+的含义如下:

rb+表示以读写模式打开一个二进制文件,且该文件必须存在。

  • 读写模式:这意味着你可以对文件进行读取操作,也可以进行写入操作。与只读模式或只写模式不同,rb+模式允许你同时执行这两种操作。
  • 二进制文件:这表明文件是以二进制形式打开的,而不是文本形式。二进制文件通常用于存储非文本数据,如图像、音频文件或程序的可执行代码。在处理二进制文件时,数据以字节为单位进行读写,而不是按字符处理。
  • 文件必须存在:使用rb+模式打开文件时,如果指定的文件不存在,操作将失败。这与wb+模式不同,后者在文件不存在时会创建一个新文件。

简而言之,rb+模式在C语言中用于打开现有的二进制文件,以便进行读写操作。

‘肆’ 如何用Java或C语言解析二进制文件为文本文件

在学习C语言的fopen()函数时,我们了解到它的第二个参数是一个标志字符串。如果字符串中包含'b',则表示是以二进制(binary)文件模式打开,否则是以文本文件模式打开。那么,什么是文本文件,什么是二进制文件呢?从文件编码的角度来看,文件可以分为ASCII码文件和二进制码文件两种。

ASCII文件通常被称为文本文件,这种文件在磁盘中每个字符对应一个字节,用于存放对应的ASCII码。例如,数字5678的存储形式为:ASCII码:00110101 00110110 00110111 00111000,每个字节分别代表一个数字。ASCII码文件可以在屏幕上按字符显示,例如源程序文件就是ASCII文件,使用DOS命令TYPE可显示文件内容,因此能读懂文件内容。

二进制文件则是按照二进制的编码方式来存储文件的,例如数字5678的存储形式为00010110 00101110,只占两个字节。二进制文件虽然也可以在屏幕上显示,但其内容无法直接阅读。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。

文本文件与二进制文件在系统存储上实际上并没有什么区别,都是以二进制的方式存储于硬盘上。之所以分二进制文件和文本文件,主要是逻辑上的区分,文本文件更易于人工阅读。站在编程的角度看,文本文件是基于字符编码过的,常见的有ascii编码、gbk编码、unicode编码等,文本工具直接打开即可阅读。而二进制文件是基于值的编码,这个值到底是什么,完全可自定义。

如果用Java编程,可能就不会遇到以二进制打开和文本文件打开这两种方式了。Java中有字符流和字节流,字符流是对字节流的封装,有编码解码,而字节流操作的则是byte数组。Python的文件读写方式则更贴近C。因为Python和Java底层都是C,所以有必要弄清C的读写文件方式。

在Windows和DOS系统中,狭义的文本文件是指扩展名为.txt的文件。实际上,那些没有规定格式的,由可理解的ASCII及其他编码文字组成的文件都是文本文件,如C源程序文件、HTML超文本、XML。除此之外的其他文件都是二进制文件,如Word文件DOC、图像格式文件JPG。

实际上,fopen()的b标志不但可以打开二进制文件,还可以打开文本文件,同样,不带b标志也可以打开文本文件。既然如此,为什么还要区分两种打开方式呢?因为这两种方式在读写文件时的操作是不一样的。

二进制方式很简单,读文件时,会原封不动地读出文件的全部内容,写的时候,也是把内存缓冲区的内容原封不动地写到文件中。而文本方式就不一样了,在写文件时,会将换行符CRLF(0x0D 0x0A)全部转换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的0x0A换成0x0D0x0A。

所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,或内容不对的错误。即使是用文本方式打开文本文件,也要谨慎使用,比如复制文件,就不应该使用文本方式。

特别注意的是,上面这样的说法仅适用于DOS和Windows系统。在Unix和其他一些系统中,没有文本方式和二进制方式的区分,使不使用'b'标志都是一样的。这是由于不同操作系统对文本文件换行符的定义,和C语言中换行符的定义有所不同而造成的。

在DOS和Windows系统中,使用CRLF(0x0D 0x0A)即\r\n双字节作为文本文件换行符,而Unix文本文件的换行符只有一个字节LF(0x0A)。在C语言中,也是以LF即'\n'为换行符。由于DOS/Windows定义的换行符和C语言的不一致,C语言的标准输入输出函数适行读写文本文件时,就适行了CRLF->LF的转换。而Unix的定义和C语言的一样,就不必转换。

那么,为什么会有定义不一致的情况呢,这纯属历史原因。当初C是在Unix上发展的,对换行的定义自然就一样了。其后C被引入到DOS系统,为了使原有的C程序能不加修改的读写DOS的文本文件,所以就在文件读写上做了修改。随着DOS/Windows成为主流平台,这个当初为了兼容而做的修改给众多的C语言开发者添了这样一个小小的麻烦。

因此,二进制和文本模式的区别就在于对换行符和一些非可见字符的转化。所以,从安全的角度来看,使用二进制读取会比较安全一些。

‘伍’ C语言文件中,“rb”和“r”有什么区别

一、作用不同

1、rb:代表二进制文件,用来读写二进制文件。

2、r:代表文本文件,用来读写文本文件。

二、特点不同

1、rb:文件编码是变长的,灵活利用率要高,而译码要难一些,不同的二进制文件译码方式是不同的。

2、r:是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。


三、优劣不同

1、rb:二进制文件比较节约空间,这两者储存字符型数据时并没有差别。但是在储存数字,特别是实型数字时,二进制更节省空间。

2、r:文本文件存在于计算机系统中,通常在文本文件最后一行放置文件结束标志。文本文件的编码基于字符定长,译码相对要容易一些。


热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:579
制作脚本网站 发布:2025-10-20 08:17:34 浏览:873
python中的init方法 发布:2025-10-20 08:17:33 浏览:568
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:753
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:670
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:998
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:241
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:100
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:792
python股票数据获取 发布:2025-10-20 07:39:44 浏览:698