C语言实现读写二进制文件
C语言实现读写二进制文件
.LIBPATTERNS: lib%.so lib%.a
vpath % .
vpath %.c src
vpath %.h include
OBJS = mysql_binary.o
$(PRODUCT): $(OBJS)
$(CXX) $(OBJS) -o $@ $(LIBS)
读:
FILE *fp = fopen("file.dat","r");
fread(plist,sizeof(Point),100,fp);
fread的返回值为实际读入的结构体Point的元素个数。
写:
FILE *fp = fopen("file.dat","w");
fwrite(plist,sizeof(Point),100,fp);
length = mysql_fetch_lengths(res_set);
for (i=0; i<mysql_num_fields(res_set); i++) {
fwrite(row[0], 1, length[0], fp);
}
}
fclose(fp);
mysql_close(conn);
free(sql);
exit(1);
}
if ((n = fread(buf, 1, *size, fp)) < 0) { //n=*size
perror("fread file" );
exit(1);
}
sql = (char *)malloc(sizeof(char)*n*2+256); //2n+1+strlen(other sql)
c++中读取二进制数据的一行
一、介绍C++作为一种广泛应用的编程语言,其处理二进制数据的能力备受开发者关注。
在实际开发中,经常会遇到需要读取二进制文件的情况,尤其是对于需要直接操作底层数据的程序而言,读取二进制数据是十分重要的操作。
二、读取二进制数据的需求在C++编程中,读取二进制数据是一种经常遇到的需求。
二进制文件中的数据存储格式与文本文件有所不同,二进制文件中的数据是以二进制形式存储,没有像文本文件那样的换行符和空格。
需要特定的方法来读取和解析二进制文件中的数据。
三、使用ifstream读取二进制数据在C++中,可以使用ifstream类来读取二进制数据。
该类是C++标准库中的一个输入流类,可以用于从文件中读取数据。
通过使用ifstream类,可以打开一个二进制文件,并将其中的二进制数据读取到程序中进行处理。
四、示例代码以下是一个简单的示例代码,演示了如何使用C++中的ifstream类来读取二进制数据的一行:```cpp#include <iostream>#include <fstream>int m本人n() {std::ifstream file("binaryData.dat", std::ios::binary);if (file.is_open()) {char buffer[100]; // 用于存储读取的二进制数据file.read(buffer, sizeof(buffer)); // 读取二进制数据std::cout << "Read binary data: " << buffer << std::endl; // 输出读取的二进制数据file.close(); // 关闭文件流} else {std::cout << "F本人led to open file!" << std::endl;}return 0;}```以上示例代码中,首先使用ifstream类打开了一个名为binaryData.dat的二进制文件,并指定了打开文件的模式为std::ios::binary,以确保以二进制形式进行读取。
C语言读写文件两种方式ASCII和二进制。
C语⾔读写⽂件两种⽅式ASCII和⼆进制。
C语⾔读写⽂件有两种⽅式ASCII 和⼆进制。
现在举例说明:内存中的字符或字符串都是⽂本模式(unicode编码存储,统⼀长度,定长码,⽅便)内存中的其他变量都是以⼆进制编码存储程序的代码以⽂本模式ASCII码⽅式存储1.在windows系统中,⽂本模式下,⽂件以" \r\n"代表换⾏。
若以⽂本模式打开⽂件,并⽤fputs等函数写⼊换⾏符"\n"时,函数会⾃动在"\n"前⾯加上"\r"。
即实际写⼊⽂件的是"\r\n" 。
读取的时候⾃动去掉\r,将\n写⼊内存。
2.在类Unix/Linux系统中⽂本模式下,⽂件以"\n"代表换⾏。
所以Linux系统中在⽂本模式和⼆进制模式下并⽆区别。
注:Windows 采⽤ \r\n 是有原因的,Windows 采⽤了传统的英⽂打字机的模式。
想想看英⽂打字机是如何换⾏的呢?英⽂打字机是选择将⼩车退回⾄起点,这个过程称为回车(carriage return, CR),随后把⼩车调⾄下⼀⾏的位置,这个过程称为换⾏(line feed, LF),这样就完成了英⽂打字机中换⾏过程。
回车(CR)在计算机中使⽤ ASCII 为 13 的字符来表⽰,换⾏(LF)使⽤ASCII 为 10 的字符来表⽰。
这也就是 Windows 的换⾏采⽤ \r\n 来表⽰的原因。
3.当⽤⼆进制模式读取windows下代表换⾏的\r\n时,不能⾃动去掉\r,这样读⼊内存的数据多了⼀个‘\r’,造成跟在‘\r’后⾯的⼆进制位右移,读取必然会出错!4.如果在⽂件中读到0x1B,⽂本模式会认为这是⽂件结束符,也就是⼆进制模型不会对⽂件进⾏处理,⽽⽂本⽅式会按⼀定的⽅式对数据作相应的转换。
5.⽤⽂本模式写⽂件,读取时也要⽤⽂本模式,⼆进制模式同样。
C语言实现二进制文件读写
C语言实现二进制文件读写C语言中,实现二进制文件的读写主要借助于文件指针和文件操作函数。
二进制文件的读写相对于文本文件的读写要更复杂一些,因为二进制文件中存储的是字节流,而不是可见字符。
一、二进制文件的写入二进制文件的写入可以通过以下步骤实现:1. 打开文件:通过`fopen`函数以二进制写入模式打开文件,返回一个文件指针。
例如,`FILE *fp = fopen("data.bin", "wb");`即可打开名为"data.bin"的二进制文件。
2. 写入数据:通过`fwrite`函数向文件中写入数据。
该函数的参数包括待写入数据的存储地址、每个数据项的大小和待写入数据的数量。
例如,`int data[] = {1, 2, 3, 4, 5}; fwrite(data, sizeof(int), 5, fp);`即可将整型数组data的数据写入文件中。
3. 关闭文件:通过`fclose`函数关闭已打开的文件。
例如,`fclose(fp);`即可关闭文件指针fp所指向的文件。
二、二进制文件的读取二进制文件的读取可以通过以下步骤实现:1. 打开文件:通过`fopen`函数以二进制读取模式打开文件,返回一个文件指针。
例如,`FILE *fp = fopen("data.bin", "rb");`即可打开名为"data.bin"的二进制文件。
2. 读取数据:通过`fread`函数从文件中读取数据。
该函数的参数包括待存储数据的地址、每个数据项的大小和待读取数据的数量。
例如,`int data[5]; fread(data, sizeof(int), 5, fp);`即可将文件中的数据读入整型数组data中。
3. 关闭文件:通过`fclose`函数关闭已打开的文件。
例如,`fclose(fp);`即可关闭文件指针fp所指向的文件。
二进制文件读写
今天终于弄明白怎样使用C++读写二进制文件了。
要读取文件必须包含<fstream>头文件,这里包含了C++读写文件的方法。
可以使用fstream类,这个类可以对文件进行读写操作。
1、打开文件。
打开文件可以有两种方式,第一种可以使用fstream类的构造函数。
fstream file("test.dat",ios_base::in|ios_base::out|ios_base::app); 另外一种方法就是使用open函数。
fstream file;file.open("test.dat",ios_base::in|ios_base::out|ios_base::app);这样就可以打开一个可读写的文件了。
如果文件不存在的话,就会创建一个新文件并且以读写方式打开。
这里需要说明一点,如果文件不存在的话,open函数中第二个参数必须包含ios_base::out|ios_base::app,否则就不能正确创建文件。
2、写文件。
先进性写文件的操作否则读一个空文件是没有意义的。
既然是写二进制文件可以向文件中写入一个整形值。
写二进制字符只能使用write函数。
但是write函数的原形是write(const char * ch, int size)。
第一个参数是char *类型,所以需要把将要写入文件的int类型转换成char *类型。
这里的转换困扰了我好几天,不过终于弄明白了。
代码如下。
int temp;file.write((char *)(&temp),sizeof(temp));3、读文件。
可以写文件了,读文件就好办多了。
读文件需要用到read函数。
其参数和write大致相同,read(const char * ch, int size)。
要把内容读到int类型变量中同样涉及到一个类型转换的问题。
和写文件一样。
int readInt;file.read((char *)(&readInt),sizeof(readInt));这样文件中的int值就读入到int型变量readInt中了。
fopen 二进制读取
fopen 二进制读取在计算机编程中,文件的读取和写入是非常常见的操作。
而在读取文件时,我们可以选择以二进制方式进行读取,这就是fopen二进制读取的用法。
我们需要了解一下什么是二进制。
在计算机中,所有的数据都是以二进制的形式存储和处理的。
二进制由0和1两个数字组成,可以表示各种各样的数据,如整数、浮点数、字符等。
在文件中,数据也是以二进制的形式存储的。
接下来,我们来看一下fopen二进制读取的具体用法。
在C语言中,我们可以使用fopen函数来打开一个文件,并指定打开方式为二进制读取。
具体的代码如下所示:```cFILE *file = fopen("filename", "rb");```上面的代码中,"filename"表示要打开的文件的路径和名称。
"rb"表示以二进制方式进行读取。
其中,"r"表示只读,"b"表示二进制。
通过这样的方式打开文件后,我们就可以读取文件中的二进制数据了。
接下来,我们可以使用fread函数来读取文件中的二进制数据。
具体的代码如下所示:```cunsigned char buffer[1024];size_t bytesRead = fread(buffer, sizeof(unsigned char), sizeof(buffer), file);```上面的代码中,我们定义了一个缓冲区buffer,用来存储从文件中读取的数据。
通过调用fread函数,我们可以将文件中的二进制数据读取到缓冲区中。
其中,第一个参数是缓冲区的地址,第二个参数是每个元素的大小,第三个参数是要读取的元素数量,第四个参数是文件指针。
在读取文件时,我们可以根据需要选择读取的数据量。
上面的代码中,我们每次读取1024个字节的数据。
读取完成后,fread函数会返回实际读取到的元素数量,我们可以根据这个值来判断是否已经读取到文件末尾。
C语言实现二进制文件读写
C语言实现二进制文件读写(转载)文件的读写是挺基础,为了备忘也为了之后查资料方便,从网上找了这个例子,觉得写的很好,就转载过来了。
先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。
二进制读写的顺序是用fopen 以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。
下面我们看看一个拷贝程序的源码:Copy.c:#include <stdio.h>#include <stdlib.h>#define MAXLEN 1024int main(intargc, char *argv[]){if(argc< 3 ){printf("usage: %s %s\n", argv[0], "infileoutfile");exit(1);}FILE * outfile, *infile;outfile = fopen(argv[2], "wb" );infile = fopen(argv[1], "rb");unsigned char buf[MAXLEN];if(outfile == NULL || infile == NULL ){printf("%s, %s",argv[1],"not exit\n");exit(1);}intrc;while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 ) {fwrite(buf, sizeof( unsigned char ), rc, outfile );}fclose(infile);fclose(outfile);system("PAUSE");return 0;}现在来讲讲这个程序,这个程序的作用就是将文件1的内容直接拷贝到文件2中,注意fread 的返回值,这个值需要在fwrite的时候将会用到。
文件二进制读取
文件二进制读取文件二进制读取指的是以二进制的方式读取文件中的内容。
与文本读取不同,文件二进制读取是以字节为单位读取文件的内容。
在计算机领域,一切都是以二进制表达的,因此对于诸如图片、音频、视频等文件,采用二进制读取会更加方便。
文件二进制读取的方式有很多,这里介绍两种常用的方式:基于文件指针的读取和基于字节数组的读取。
一、基于文件指针的读取基于文件指针的读取是指通过文件指针的移动来读取文件中的内容。
在C语言中,可以通过fread函数实现这一功能。
以读取一个jpg图片文件为例,代码如下:``` #include <stdio.h>int main(){ FILE *fp = fopen("test.jpg", "rb");//以二进制方式打开文件 unsigned char buffer[1024]; size_t count = 0;while((count = fread(buffer, 1, 1024, fp)) >0){ //每次读取1024字节 for(int i = 0; i < count; i++){ printf("%02x", buffer[i]);//以16进制形式输出 } } fclose(fp); return 0; } ```在上述代码中,首先以二进制方式打开一个名为“test.jpg”的文件,然后每次读取1024字节,将读取到的内容以16进制形式输出,最后关闭文件。
二、基于字节数组的读取基于字节数组的读取是指将文件读入一个字节数组中,具体读取方式同样可以采用fread函数。
以读取一个wav音频文件为例,代码如下:``` #include <stdio.h>int main(){ FILE *fp = fopen("test.wav", "rb");//以二进制方式打开文件 fseek(fp, 44, SEEK_SET);//跳过前44字节的头信息 unsigned char buffer[1024]; size_t count = 0;while((count = fread(buffer, 1, 1024, fp)) >0){ //每次读取1024字节 //对读取到的字节数组进行处理 } fclose(fp); return 0; } ```在上述代码中,同样以二进制方式打开一个名为“test.wav”的文件,然后跳过前44字节的头信息(wav 文件的前44字节为文件头),接着每次读取1024字节的内容,对读取到的字节数组进行处理。
C++结构体序列化读写二进制文件类
C++结构体序列化读写⼆进制⽂件类C与C++的⼆进制⽂件读写参考下⾯的⽂章,C/C++读写⽂本⽂件、⼆进制⽂件C的⽂件操作#include <stdio.h>ephDE_recOne rec; // 结构定义FILE * f = fopen("file_name","rb"); // ⽂件打开if(f == NULL) return; // 打开失败fread(&rec, sizeof(ephDE_recOne),1, f); // 读⼆进制⽂件数据fclose(f);C++的⽂件操作#include <iostream>#include <fstream>ephDE_recOne rec; // 结构定义ifstream infile("file_name",ios::in | ios::binary); // ⽂件打开if(!infile) return; // 打开失败infile.read((char *)&rec, sizeof(double)*deLen); // 读⼆进制⽂件数据infile.close();C++的⼆进制⽂件读取结构体问题在编写⼀个DE405星历⽂件的读取函数中,结构体读取后数值与实际的不⼀致。
在下⾯这段代码中,读取struct后label与constName内容正确,后⾯结构数值不正确。
struct ephDE_recOne{char label[3][84];char constName[400][6];double timeData[3];int numConst;double AU;double EMRAT;int coeffPtr[12][3];int DENUM;int libratPtr[3];int RSize;};const int deLen = 1018;void read(){using namespace std;ephDE_recOne rec;ifstream infile(DE_file_path.c_str(), ios::in | ios::binary);if(!infile)throw exception();infile.read((char *)&rec, sizeof(double)*deLen);infile.close();}通过⽐较读取结果与实际数值发现,读取到的AU数值为实际的EMRAT数值。
c语言获取文件内容的二进制格式
《深度解析:C语言中获取文件内容的二进制格式的方法》在C语言编程中,获取文件内容的二进制格式是非常重要的一部分。
在本文中,我将会以从简到繁、由浅入深的方式来探讨这一主题,以便读者能更深入地理解。
1. 什么是二进制格式?让我们来简要地了解一下什么是二进制格式。
二进制格式是指以二进制形式存储的数据格式,它是由0和1组成的。
在计算机中,所有的数据最终都会以二进制格式来表示和存储。
了解如何获取文件内容的二进制格式就显得尤为重要了。
2. 使用C语言获取文件内容的二进制格式在C语言中,有多种方法可以获取文件内容的二进制格式。
这其中最常见的方法就是使用标准库函数来操作文件。
你可以使用fopen()函数打开文件,然后使用fread()函数来读取文件的内容。
通过这种方式,你可以逐个字节地读取文件内容,从而获取到文件的二进制格式。
3. 深入理解二进制格式的获取方法然而,仅仅使用fread()函数来读取文件内容可能并不够深入。
在实际的编程中,我们可能会遇到更为复杂的情况,比如需要跳过特定长度的数据、需要按照特定的格式读取数据等。
这时,我们就需要更深入地理解如何使用C语言来获取文件内容的二进制格式了。
4. 个人观点和理解对于我个人来说,掌握如何获取文件内容的二进制格式对于C语言编程来说是非常重要的。
在实际的项目开发中,我们经常会遇到需要读取和处理二进制文件的情况,比如读取图片文件、音频文件等。
如果不能深入理解如何获取文件内容的二进制格式,就很难完成这些任务。
5. 总结和回顾了解如何在C语言中获取文件内容的二进制格式是非常重要的。
通过本文的介绍,我希望读者能够更全面、深刻和灵活地理解这一主题。
在实际的编程中,要根据具体的需求和情况来选择合适的方法来获取文件的二进制格式,这样才能更好地处理文件操作的需求。
以上是关于C语言获取文件内容的二进制格式的深度解析,希望对你有所帮助。
(文章内容总字数大于3000字)6. 获取文件二进制格式的进阶方法除了使用标准库函数外,还可以使用C语言中的一些高级库来获取文件的二进制格式。
C语言实现读写二进制文件
C语言实现读写二进制文件C语言提供了丰富的文件操作函数,可以方便地进行二进制文件的读写。
下面是一个使用C语言实现读写二进制文件的示例。
```c#include <stdio.h>#include <stdlib.h>typedef structint id;char name[20];double grade;} Student;int maiFILE *file;Student students[3];//写入文件if ((file = fopen("students.bin", "wb")) == NULL)printf("无法写入文件。
\n");exit(1);}students[0].id = 1;strcpy(students[0].name, "张三");students[0].grade = 90.0;students[1].id = 2;strcpy(students[1].name, "李四");students[1].grade = 85.5;students[2].id = 3;strcpy(students[2].name, "王五");students[2].grade = 95.0;fwrite(students, sizeof(Student), 3, file); fclose(file);//读取文件if ((file = fopen("students.bin", "rb")) == NULL) printf("无法打开文件。
\n");exit(1);}fseek(file, 0, SEEK_END);long fileSize = ftell(file);rewind(file);int numStudents = fileSize / sizeof(Student);Student *readStudents = malloc(fileSize);fread(readStudents, sizeof(Student), numStudents, file);for (int i = 0; i < numStudents; i++)printf("学生ID:%d, 姓名:%s, 成绩:%lf\n",readStudents[i].id, readStudents[i].name, readStudents[i].grade);}fclose(file);free(readStudents);return 0;```上述示例中,首先定义了一个结构体`Student`,表示学生信息。
c语言fopen打开二进制文件并运算示例
c语言fopen打开二进制文件并运算示例以C语言fopen打开二进制文件并运算示例在C语言中,我们可以使用fopen函数来打开文件。
而对于二进制文件的处理,我们可以通过指定打开模式为"rb"来实现。
本文将以一个示例来演示如何使用fopen打开二进制文件,并进行简单的运算。
让我们创建一个名为"numbers.bin"的二进制文件,并将一些整数写入该文件中。
我们可以使用以下代码来实现:```c#include <stdio.h>int main() {// 创建一个二进制文件FILE *file = fopen("numbers.bin", "wb");if (file == NULL) {printf("无法创建文件!\n");return 1;}// 写入整数到文件int numbers[] = {10, 20, 30, 40, 50};fwrite(numbers, sizeof(int), sizeof(numbers) / sizeof(int), file);// 关闭文件fclose(file);return 0;}```在上述代码中,我们首先使用fopen函数以二进制写入模式("wb")打开一个名为"numbers.bin"的文件。
然后,我们使用fwrite函数将整数数组"numbers"写入文件中。
最后,我们使用fclose函数关闭文件。
接下来,我们将使用fopen以二进制读取模式("rb")打开该文件,并进行一些简单的运算。
我们可以使用以下代码来实现:```c#include <stdio.h>int main() {// 打开二进制文件FILE *file = fopen("numbers.bin", "rb");if (file == NULL) {printf("无法打开文件!\n");return 1;}// 读取整数数组int numbers[5];fread(numbers, sizeof(int), sizeof(numbers) / sizeof(int), file);// 进行运算int sum = 0;for (int i = 0; i < sizeof(numbers) / sizeof(int); i++) {sum += numbers[i];}printf("数组中的整数之和为:%d\n", sum);// 关闭文件fclose(file);return 0;}```在上述代码中,我们首先使用fopen函数以二进制读取模式("rb")打开"numbers.bin"文件。
c语言 fscanf 二进制
C语言是一种广泛应用的编程语言,其文件输入输出函数fscanf对于处理二进制文件具有很高的灵活性和效率。
本文将介绍C语言中fscanf函数对二进制文件的读取操作,并结合实际案例进行详细讲解。
一、fscanf函数概述fscanf函数是C语言中用于从输入流中读取格式化数据的函数,其原型为:int fscanf(FILE *stream, const char *format, ...);函数的第一个参数为指向输入流的指针,第二个参数为格式化字符串,后面的参数为接收输入的变量。
fscanf函数会自动跳过空白字符并且根据格式化字符串的指示进行读取操作。
二、fscanf函数对二进制文件的操作fscanf函数除了可以读取文本文件外,还可以读取二进制文件。
二进制文件和文本文件的区别在于,二进制文件是以字节为单位进行存储的,而文本文件则以字符为单位进行存储。
对于二进制文件,fscanf函数可以直接按照字节进行读取操作,无需考虑文件中的换行符或空格。
三、实际案例分析为了更好地理解fscanf函数对二进制文件的操作,我们通过一个实际案例进行详细讲解。
假设我们有一个名为“data.bin”的二进制文件,其内容为一组整数数据,我们需要使用C语言的fscanf函数读取该文件并输出其中的数据。
1. 打开文件我们需要使用fopen函数打开名为“data.bin”的二进制文件,并使用“rb”模式以二进制形式读取文件。
具体代码如下:```cFILE *file = fopen("data.bin", "rb");if(file == NULL) {printf("无法打开文件\n");return 1;}```2. 读取数据接下来,我们使用fscanf函数从二进制文件中读取数据,并将其存储在一个整型变量中。
对于二进制文件,我们可以直接使用c格式化字符串按字节进行读取,具体代码如下:```cint data;while(fscanf(file, "c", data) != EOF) {printf("d ", data);}```在上面的代码中,我们使用while循环不断读取数据,直到文件的末尾为止,并将读取的数据依次输出到控制台上。
c语言二进制文件读取写入
c语言二进制文件读取写入C语言可以用文件读写函数来读取和写入二进制文件。
在这里,我们讲解一下如何使用这些函数。
首先,我们需要打开一个二进制文件。
可以使用fopen函数来打开文件,需要指定文件名和打开方式,"rb"代表以二进制方式读取文件。
例如:```cFILE *fp;fp = fopen("file.bin", "rb");```这将打开名为file.bin的二进制文件,并返回一个文件指针。
如果文件不存在,将返回NULL。
读取文件时可以使用fread函数。
该函数需要指定读取的元素个数、每个元素的大小、要读取的文件指针和要写入的缓冲区。
例如,我们可以读取10个整数到一个整型数组中:```cint buffer[10];fread(buffer, sizeof(int), 10, fp);```在写入二进制文件时,我们可以使用fwrite函数。
该函数需要指定写入的元素个数、每个元素的大小、要写入的缓冲区和要写入的文件指针。
例如,我们可以写入一个整数数组到二进制文件中:```cint buffer[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};fwrite(buffer, sizeof(int), 10, fp);```完成读取和写入操作后,需要关闭文件。
可以使用fclose函数来关闭文件指针。
例如:```cfclose(fp);```总之,使用C语言进行二进制文件的读写可以使用fopen、fread、fwrite和fclose等函数。
这些函数非常有用且灵活,可以满足各种读写需求。
读取二进制文件的方法
读取二进制文件的方法随着计算机技术的日益发展,我们越来越离不开二进制文件。
二进制文件是计算机中以二进制代码表示的文件,不同于文本文件,二进制文件需要通过特定工具才能够读取。
那么如何读取二进制文件呢?本文将介绍几种常见的读取二进制文件的方法。
一、使用文件流读取二进制文件文件流是C++中常用的读取二进制文件的方法,通过文件流可以打开并读取二进制文件中的每一个字节。
文件流的使用方法如下:```C++#include <iostream>#include <fstream>int main(){// 打开二进制文件std::ifstream fin("test.bin", std::ios::binary);// 检测文件是否打开成功if (!fin.is_open()){std::cerr << "Open test.bin failed!" << std::endl;return -1;}// 读取二进制文件内容char c;while (fin.get(c)){std::cout << c;}// 关闭二进制文件fin.close();return 0;}```其中,`std::ios::binary`表示以二进制模式打开文件,`fin.get(c)`用于逐个读取文件中的每一个字节。
二、使用内存映射文件读取二进制文件内存映射文件是一种将文件映射到内存中的技术,可以通过指针直接访问二进制文件中的数据。
使用内存映射文件读取二进制文件的方法如下:```C++#include <iostream>#include <fstream>#include <sys/mman.h>#include <unistd.h>#include <fcntl.h>int main(){// 打开二进制文件int fd = open("test.bin", O_RDONLY);if (fd < 0){std::cerr << "Open test.bin failed!" << std::endl;return -1;}// 获取文件大小off_t file_size = lseek(fd, 0, SEEK_END);// 将文件映射到内存中char* data = (char*)mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, fd, 0);if (data == MAP_FAILED){std::cerr << "mmap failed!" << std::endl;close(fd);return -1;}// 读取二进制文件内容for (off_t i = 0; i < file_size; i++){std::cout << data[i];}// 关闭内存映射munmap(data, file_size);// 关闭文件close(fd);return 0;}```其中,`open()`函数用于打开文件,`lseek()`函数用于获取文件大小,`mmap()`函数用于将文件映射到内存中,`munmap()`函数用于关闭内存映射。
CC++读写文本文件、二进制文件的方法
CC++读写⽂本⽂件、⼆进制⽂件的⽅法⼀:⽬的掌握C语⾔⽂本⽂件读写⽅式;掌握C语⾔⼆进制⽂件读写⽅式;掌握CPP⽂本⽂件读写⽅式;掌握CPP⼆进制⽂件读写⽅式;⼆:C语⾔⽂本⽂件读写1. ⽂本⽂件写⼊//采⽤C模式对Txt进⾏写出void TxtWrite_Cmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ ){index[i] = i;x_pos[i] = rand()%1000 * 0.01 ;y_pos[i] = rand()%2000 * 0.01;}//写出txtFILE * fid = fopen("txt_out.txt","w");if(fid == NULL){printf("写出⽂件失败!\n");return;}for(int i = 0; i < 50; i ++ ){fprintf(fid,"%03d\t%4.6lf\t%4.6lf\n",index[i],x_pos[i],y_pos[i]);}fclose(fid);}2. ⽂本⽂件读取//采⽤C模式对Txt进⾏读取void TxtRead_Cmode(){FILE * fid = fopen("txt_out.txt","r");if(fid == NULL){printf("打开%s失败","txt_out.txt");return;}vector<int> index;vector<double> x_pos;vector<double> y_pos;int mode = 1;printf("mode为1,按字符读⼊并输出;mode为2,按⾏读⼊输出;mode为3,知道数据格式,按⾏读⼊并输出\n");scanf("%d",&mode);if(mode == 1){//按字符读⼊并直接输出char ch; //读取的字符,判断准则为ch不等于结束符EOF(end of file)while(EOF!=(ch= fgetc(fid)))printf("%c", ch);}else if(mode == 2){char line[1024];memset(line,0,1024);while(!feof(fid)){fgets(line,1024,fid);printf("%s\n", line); //输出}}else if(mode == 3){//知道数据格式,按⾏读⼊并存储输出int index_tmp;double x_tmp, y_tmp;while(!feof(fid)){fscanf(fid,"%d%lf%lf\n",&index_tmp, &x_tmp, &y_tmp);index.push_back(index_tmp);x_pos.push_back(x_tmp);y_pos.push_back(y_tmp);}for(int i = 0; i < index.size(); i++)printf("%04d\t%4.8lf\t%4.8lf\n",index[i], x_pos[i], y_pos[i]);}fclose(fid);}三:C语⾔⼆进制⽂件读写1. ⼆进制⽂件写⼊//采⽤C模式写⼆进制⽂件void DataWrite_CMode(){//准备数据double pos[200];for(int i = 0; i < 200; i ++ )pos[i] = i ;//写出数据FILE *fid;fid = fopen("binary.dat","wb");if(fid == NULL){printf("写出⽂件出错");return;}int mode = 1;printf("mode为1,逐个写⼊;mode为2,逐⾏写⼊\n");scanf("%d",&mode);if(1==mode){for(int i = 0; i < 200; i++)fwrite(&pos[i],sizeof(double),1,fid);}else if(2 == mode){fwrite(pos, sizeof(double), 200, fid);}fclose(fid);}2.⼆进制⽂件读取//采⽤C模式读⼆进制⽂件void DataRead_CMode(){FILE *fid;fid = fopen("binary.dat","rb");if(fid == NULL){printf("读取⽂件出错");return;}int mode = 1;printf("mode为1,知道pos有多少个;mode为2,不知道pos有多少个\n"); scanf("%d",&mode);if(1 == mode){double pos[200];fread(pos,sizeof(double),200,fid);for(int i = 0; i < 200; i++)printf("%lf\n", pos[i]);free(pos);}else if(2 == mode){//获取⽂件⼤⼩fseek (fid , 0 , SEEK_END);long lSize = ftell (fid);rewind (fid);//开辟存储空间int num = lSize/sizeof(double);double *pos = (double*) malloc (sizeof(double)*num);if (pos == NULL){printf("开辟空间出错");return;}fread(pos,sizeof(double),num,fid);for(int i = 0; i < num; i++)printf("%lf\n", pos[i]);free(pos); //释放内存}fclose(fid);}四:C++⽂本⽂件读写1. ⽂本⽂件写⼊//采⽤CPP模式写txtvoid TxtWrite_CPPmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ ){index[i] = i;x_pos[i] = rand()%1000 * 0.01 ;y_pos[i] = rand()%2000 * 0.01;}//写出txtfstream f("txt_out.txt", ios::out);if(f.bad()){cout << "打开⽂件出错" << endl;return;}for(int i = 0; i < 50; i++)f << setw(5) << index[i] << "\t" << setw(10) << x_pos[i] <<"\t" <<setw(10)<< y_pos[i] << endl;f.close();}2.⽂本⽂件读取//采⽤CPP模式读取txtvoid TextRead_CPPmode(){fstream f;f.open("txt_out.txt",ios::in);//⽂件打开⽅式选项:// ios::in = 0x01, //供读,⽂件不存在则创建(ifstream默认的打开⽅式)// ios::out = 0x02, //供写,⽂件不存在则创建,若⽂件已存在则清空原内容(ofstream默认的打开⽅式)// ios::ate = 0x04, //⽂件打开时,指针在⽂件最后。
c++二进制读写中文
c++二进制读写中文在C++中进行二进制读写中文,你可以使用文件流(fstream)来实现。
下面我会从多个角度来回答这个问题。
首先,要进行二进制读写,你需要使用二进制模式打开文件。
可以使用`std::ios::binary`标志来指定二进制模式。
例如,如果你要读取一个二进制文件,可以使用`std::ifstream`类来打开文件,并指定二进制模式:cpp.std::ifstream file("filename.bin", std::ios::binary);如果你要写入一个二进制文件,可以使用`std::ofstream`类来打开文件,并指定二进制模式:cpp.std::ofstream file("filename.bin", std::ios::binary);接下来,你可以使用文件流的`read`和`write`函数来进行读写操作。
对于中文字符,每个字符通常占用多个字节,所以你需要确保正确地读取和写入字符的字节数。
读取中文字符时,你可以先读取字符的字节数,然后再读取对应数量的字节,并将其转换为字符串。
下面是一个示例:cpp.std::string chinese;int size;file.read(reinterpret_cast<char>(&size), sizeof(int));char buffer = new char[size];file.read(buffer, size);chinese.assign(buffer, size);delete[] buffer;写入中文字符时,你可以先将字符转换为字节数组,然后再写入字节数组的长度和内容。
下面是一个示例:cpp.std::string chinese = "中文";int size = chinese.size();file.write(reinterpret_cast<const char>(&size), sizeof(int));file.write(chinese.c_str(), size);需要注意的是,读取和写入的字节数必须一致,否则可能导致数据错误。
C语言实现读写二进制文件
C语言实现读写二进制文件C语言提供了各种函数来读写二进制文件。
二进制文件是一种以二进制形式存储数据的文件,与文本文件相比,二进制文件不以字符为单位,而是以字节为单位存储数据。
读写二进制文件可以用于处理图片、音频、视频等非文本类型的文件。
要读写二进制文件,首先需要打开文件。
使用`fopen`函数可以打开一个文件,语法为:```cFILE* fopen(const char *filename, const char *mode);```其中,`filename`是要打开的文件名,`mode`是打开文件的模式,常用的模式有:- `"rb"`:以二进制模式打开一个已有的文件,用于读取。
- `"wb"`:以二进制模式打开一个文件,如果文件存在则截断为空文件,如果文件不存在则创建新文件,用于写入。
- `"ab"`:以二进制模式打开一个文件追加数据,如果文件不存在则创建新文件。
`fopen`函数返回一个指向`FILE`类型的指针,该指针表示已打开文件的文件流。
示例:```c#include <stdio.h>int maiFILE *file = fopen("data.bin", "rb");if (file == NULL)printf("无法打开文件\n");return 1;}//在这里进行读写操作fclose(file); // 关闭文件return 0;```使用`fwrite`函数可以将数据以二进制形式写入文件,语法为:```csize_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);```其中,`ptr`是指向要写入数据的指针,`size`是每个数据项的大小,`count`是要写入的数据项数目,`stream`是要写入的文件流。
C++中对二进制文件的读写操作
C++中对二进制文件的读写操作二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件。
因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件。
对二进制文件的操作也需要先打开文件,用完后要关闭文件。
在打开时要用ios::binary指定为以二进制形式传送和存储。
二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件。
这是和ASCII文件不同的地方。
一、用成员函数read和write读写二进制文件对二进制文件的读写主要用istream类的成员函数read和write 来实现。
这两个成员函数的原型为istream& read(char *buffer,int len);ostream& write(const char * buffer,int len);字符指针buffer指向内存中一段存储空间。
len是读写的字节数。
调用的方式为a. write(p1,50);b. read(p2,30);例.14 将一批数据以二进制形式存放在磁盘文件中。
#include <fstream>using namespace std;struct student{char name[20];int num;int age;char sex;};{studentstud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1004,17,'f'};ofstream outfile("stud.dat",ios::binary);if(!outfile){cerr<<"open error!"<<endl;abort( );//退出程序}for(int i=0;i<3;i++)outfile.write((char*)&stud[i],sizeof(stud[i]));outfile.close( );return 0;}其实可以一次输出结构体数组的个元素,将for循环的两行改为以下一行:outfile.write((char*)&stud[0],sizeof(stud));执行一次write函数即输出了结构体数组的全部数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fread(&k, sizeof(int), 1, fp);
printf("%d\n", k);
fread(buf, sizeof(char), 1024, fp);
printf("%s\n", buf);
return 0;
}
二进制文件和文本文件的物理逻辑上都是0、1存储的,它们的区别是在逻辑层,而非物理层。
C
view plaincopy to clipboardprint?
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char ** argv){
size_t len = strlen(str);
fwrite(&i, sizeof(int), 1, fp);
fwrite(str, sizeof(char), len, fp);
fclose(fp);
fp = fopen(file_name, "rb");
int k = 0;
char buf[1024];
PRODUCT = mysql_binary
.LIBPATTERNS: lib%.so lib%.a
vpath % .
vpath %.c src
vpath %.h include
OBJS = mysql_binary.o
$(PRODUCT): $(OBJS)
$(CXX) $(OBJS) -o $@ $(LIBS)
length = mysql_fetch_lengths(res_set);
for (i=0; i<mysql_num_fields(res_set); i++) {
fwrite(row[0], 1, length[0], fp);
}
}
fclose(fp);
mysql_close(conn);
free(sql);
fwrite(str, sizeof(char), len, fp);
fclose(fp);
fp = fopen(file_name, "rb");
int k = 0;
char buf[1024];
bzero(buf, 1024);
fread(&k, sizeof(int), 1, fp);
printf("%d\n", k);
const char * file_name = "out.txt";
FILE * fp = fopen(file_name, "wb");
int i = 10;
char * str = "tset";
size_t len = strlen(str);
fwrite(&i, sizeof(int), 1, fp);
flag = mysql_real_query(conn, sql, (unsigned int)(end-sql));
if (flag != 0) {
printf("insert failed, %s\n", mysql_error(conn));
exit(1);
}
if ((mysql_real_query(conn, "SELECT file FROM www where id=5", 31)) != 0) {
fread的返回值为实际写入的结构体Point的元素个数。
简单吧,fread和fwrite的参数完全一样。在实际进行文件读写之前,应该先弄清文件数据的数据结构,这样就可以根据数据结构来设计与文件数据一致的结构体,一次性读入或写入数据。而不需要每次从二进制文件中读写一小块儿数据,从而避免出错,同时也避免多次的循环读写,加快读写速度。
MYSQL_FIELD *field;
int i, flag;
char *sql;
FILE *fp;
char *buf;
int n=0;
char *end;
unsigned long *length;
if (argc != 2) {
printf("Usage: %s srcfile\n", argv[0]);
perror("fread file" );
exit(1);
}
sql = (char *)malloc(sizeof(char)*n*2+256); //2n+1+strlen(other sql)
if (sql == NULL) {
perror("malloc sql" );
exit(1);
}
conn = mysql_init(NULL);
fread(buf, sizeof(char), 1024, fp);
printf("%s\n", buf);
return 0;
}
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <stdlib.h>
exit(1);
}
filename = argv[1];
if ((get_file_size(filename, size)) == -1) {
perror("get file size" );
exit(1);
}
if ((buf = (char *)malloc(sizeof(char)*(*size+1))) == NULL) {
C
include <stdio.h>
#include <mysql/mysql.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define host "localhost" //mysql server
printf("insert failed,%s\n", mysql_error(conn));
exit(1);
}
res_set = mysql_store_result(conn);
fclose(fp);
fp = NULL;
fp = fopen("foo.bk", "wb" );
while ((row = mysql_fetch_row(res_set)) != NULL) {
#define username "root"
#define password "cipher"
#define database "www"
int get_file_size(char *path, off_t *size)
{
struct stat file_stats;
if(stat(path, &file_stats))
.c.o:
.PHONY:clean
clean:
-rm -f $(OBJS) $(PRODUCT)
语言二进制文件读写(
经常遇到这样的问题。由于二进制文件没有ASCII方式的直观性,所以读写时调试起来比较麻烦。用C语言读写文件的好处之一是比C++的I/O库快(如果做过ACM应该会有这样的体验),此外C语言读写只需要简单的几个库函数,如fopen(),fclose(),fwrite(),fread(),fsanf(),fprintf(),其中fsanf()和fprintf()用于ASCII文件的读写,fwrite()和fread()用于二进制文件的读写。以下是一个小小的实例总结:
printf("connect mysql, %s\n", mysql_error(conn));
exit(1);
}
strcpy(sql, "insert into www(id, name, file) values(5, 'peter', " );
end = sql;
end += strlen(sql); //point sql tail
C#读取二进制文件问题的所在
在许多计算机科学领域,C和C++仍旧直接依照数据结构来储存和读取数据。在C和C++中,依照内存中的数据结构来读取和写文件,是十分简单的。在C中,你只需要使用fwrite()函数,并提供下列参数:一个指向你的数据的指针,告诉它有多少个数据,一个数据有多大。这样,就直接用二进制格式把数据写成文件了。
perror("malloc buf" );
exit(1);
}
if ((fp = fopen(filename, "rb" )) == NULL) {
perror("fopen file" );
exit(1);