导航:首页 > 文件教程 > 文件二进制读取

文件二进制读取

发布时间:2021-10-24 11:05:19

1. 如何快速读取二进制文件


快速读取二进制文件的方法如下:
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中了。

4、文件指针。
在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg和seekp函数。在fstream类中有两个文件指针,一个是读取文件的指针
,一个是写文件的指针分别用tellg和tellp文件来取得指针的位置。同样seekg和seekp两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。先对几个枚举类型进行一下说明:
ios_base::beg ——文件开始位置ios_base::cur ——文件当前位置ios_base::end ——文件末尾位置下面以seekg为例说明一下指针移动的方法:file.seekg(3) ——指针移动到第三个字符的位置file.seekg(ios_base::beg) ——指针移动到文件开头file.seekg(ios_base::end) ——指针移动到文件末尾file.seekg(-3,ios_base::cur) ——
指针当前位置向前移动三个字符file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符

5、对文件操作完毕后别忘了关闭文件。

2. C++中怎样进行二进制文件的读写

#include <fstream>

写二进制文件应该使用ofstream类,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

下面是示例代码,用于写入文件。

std::ofstream fout("a.dat", std::ios::binary);

int nNum = 20;

std::string str("Hello, world");

fout.write((char*)&nNum, sizeof(int));

fout.write(str.c_str(), sizeof(char) * (str.size()));

fout.close();

而写文本文件则比较简单,如下:

std::ofstream fout("b.dat");

int nNum = 20;

std::string str("Hello, world");

fout << nNum <<","<< str << std::endl;

fout.close();

读二进制文件

读取二进制文件可以使用ifstream 类来进行,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

下面是示例代码:

std::ifstream fin("a.dat", std::ios::binary);

int nNum;

char szBuf[256] = {0};

fin.read((char*)&nNum, sizeof(int));

fin.read(szBuf, sizeof(char) * 256);

std::cout <<"int = "<< nNum << std::endl;

std::cout <<"str = "<< szBuf << std::endl;

fin.close();

3. 文本文件读取和二进制文件读写的区别

一、文本文件与二进制文件的定义
大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。

从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。

二、文本文件与二进制文件的存取
文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流,然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件流"01000000_01000001_01000010_01000011"(下划线''_'',为了增强可读性手动添加的),第一个8比特''01000000''按ASCII码来解码的话,所对应的字符是字符''A'',同理其它3个8比特可分别解码为''BCD'',即这个文件流可解释成“ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。

事实上,世界上任何东西要与其他东西通信会话,都存在一个既定的协议,既定的编码。人与人之间通过文字联络,汉字“妈”代表生你的那个人,这就是一种既定的编码。但注意到这样一种情况,汉字“妈”在日本文字里有可能是你生下的那个人,所以当一个中国人A与日本B之间用“妈”这个字进行交流,出现误解就很正常的。用记事本打开二进制文件与上面的情况类似。记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流''00000000_00000000_00000000_00000001''可能在二进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了"NULL_NULL_NULL_SOH"这四个控制符。

文本文件的存储与其读取基本上是个逆过程。而二进制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已,也不再叙述。

三、文本文件与二进制文件的优缺点
因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。关于空间利用率,想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符.

在windows下,文本文件不一定是一ASCII来存贮的,因为ASCII码只能表示128的标识,你打开一个txt文档,然后另存为,有个选项是编码,可以选择存贮格式,一般来说UTF-8编码格式兼容性要好一些.而二进制用的计算机原始语言,不存贮兼容性. 很多书上还认为,文本文件的可读性要好些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件.

而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将''\n'',换成''\r\n'',所以文件读写时,操作系统需要一个一个字符的检查当前字符是不是''\n''或''\r\n'').这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来

4. 如何实现文件以二进制读出

#include<stdio.h>
void printfM(int a2[10],int b2[10])
{
int f,g,h=0;
for(f=9;f>=0;f--) /*确定所用的数组的空间*/
{
if(a2[f]==1)
{
break;
}
}
for(g=9;g>=0;g--) /*确定所用的数组的空间*/
{
if(b2[g]==0||b2[g]==1)
{
break;
}
}

for(f;f>=0;f--) /*输出整数部分*/
printf("%d",a2[f]);
printf(" ");
//printf("."); /*打印小数点*/
//for(h;h<=g;h++) /*输出小数部分*/
// printf("%d",b2[h]);
}
void change(float p)
{
int a1[10],b1[10]; /*定义二进制的整数和小数部分的取值范围都是10位*/
int i=0,j=0;
int x;
float y;
y=p-(int)p; /*取小数部分*/
x=p-y; /*取整数部分*/
do /*对整数部分转换*/
{
a1[i]=x%2;
x=x/2;
i++;
}while(x!=0&&i<=9);
do /*对小数部分转换*/
{
y=y*2;
if(y>=1)
{
b1[j]=1;
y=y-1;
}
else
b1[j]=0;
j++;
}while(y!=0&&j<=9);
printfM(a1,b1); /*打印出转换的二进制*/
}

void printCharArray(char c[],int trueSize){
for(int i=0;i<trueSize;i++)
change((float)c[i]);
printf("\n");
}

main(){
FILE * file=fopen("D:\\XXX.txt","r");
char b[8];//一次读8个char
int trueSize=0;
int sum=0;
while(true){
trueSize=fread(&b,sizeof(char),8,file);
sum=sum+trueSize;
printf("------第%d字节到第%d字节数据-------\n",sum-trueSize,sum);
printCharArray(b,trueSize);
if(trueSize<8) break;
}
fclose(file);
}

5. 请问如何用C语言显示读取的二进制文件内容,以二进制的形...

请问如何用C语言显示读取的二进制文件内容,以二进制的形...
绿竹别其三分景 红梅正报万家春 春回大地 一干二净除旧习 五讲四美树新风 辞旧迎春

6. 二进制的bin文件如何可以读取出来

#include<stdio.h>
#defineN6
voidmain(){inti,a[N]={1,2,3,4,5,6},b[N];FILE*fp;
if(fp=fopen("data.bin","wb+")){
fwrite(a,sizeof(int),N,fp);
fclose(fp);
}elseprintf("无法建立文件。 ");
if(fp=fopen("data.bin","rb")){
fread(b,sizeof(int),N,fp);
fclose(fp);
for(i=0;i<N;i++)printf("%d",b[i]);printf(" ");
}elseprintf("无法打开数据文件。 ");
}

7. 请问如何用C语言显示读取的二进制文件内容,以二进制的形式显示,最好有具体的函数,谢谢

#include <stdio.h>
#include <stdlib.h>

//PRINTBIT 用于把一无符号整数翻译成二进制串
void PRINTBIT(unsigned int number)
{

unsigned int i;
unsigned int ckecker=1;//ckecker 用于指示由右至左的位数,初置设为 1

ckecker<<=8-1;//将 ckecker 中非零位移到其机器表示的最左边

//下一语句从左至右打印各位,每四位之间留一空隔
for (i=1;i<=8;i++)
{
//打印 ckecker 非零位所对应的 number 中对应位
putchar((number & ckecker)?'1':'0');
if (i%4==0)//每4位用空格隔开
putchar(' ');
ckecker>>=1; //准备打印 number 中的下一位
}

putchar('\n');

}

int main(void)
{
FILE *fp;
char *filename = "in1.dat";
char ch;

if((fp=fopen(filename,"rb"))== NULL )
{
printf("Can not open %s!\n",filename);
exit(0);
}

printf("原字符\t二进制\n");
ch=fgetc(fp);//取字符
while(!feof(fp))
{
putchar(ch);
putchar('\t');
PRINTBIT(ch);
ch=fgetc(fp);
}
fclose(fp);

return 0;
}

8. 请问如何读取2进制文件啊,就是直接读编码

用byte流读取吧:
File f1 = new File("D:\\a.jpg");
FileInputStream fis = new FileInputStream(f1);
DataInputStream dataIn = new DataInputStream(fis);
//每次读取1024个字节
byte[] buffer = new byte[1024];
int length=0;
while ((length = dataIn.read(buffer)) != -1) {
//文件内容已读取到buffer里,这里你可以写你想要改的代码
}

9. 如何读取二进制文件

快速读取二进制文件的方法如下: 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中了。 4、文件指针。 在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg和seekp函数。在fstream类中有两个文件指针,一个是读取文件的指针 ,一个是写文件的指针分别用tellg和tellp文件来取得指针的位置。同样seekg和seekp两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。先对几个枚举类型进行一下说明: ios_base::beg ——文件开始位置ios_base::cur ——文件当前位置ios_base::end ——文件末尾位置下面以seekg为例说明一下指针移动的方法:file.seekg(3) ——指针移动到第三个字符的位置file.seekg(ios_base::beg) ——指针移动到文件开头file.seekg(ios_base::end) ——指针移动到文件末尾file.seekg(-3,ios_base::cur) —— 指针当前位置向前移动三个字符file.seekg(3,ios_base::cur) ——指针当前位置向后移动三个字符file.seekg(3,file.tellg()) ——指针当前位置向后移动三个字符file.seekg(file.tellg()+3) ——指针当前位置向后移动三个字符 5、对文件操作完毕后别忘了关闭文件。

10. C语言二进制文件的读取问题

抄C语言中二进制文件的读取要用fread和fwrite来实现。
fwrite()与fprintf()是不同的。
fwrite将写入的数据作为文件的磁盘内容保存。fprintf将写入的数据的每个字符所对应的ASCII码作为文件的磁盘内容保存。fprintf做了一个转换的工作。
当打开文件时,记事本会自动把文件的磁盘内容作为ASCII码转换成对应的字符,然后再显示出来,即显示的是文本内容而不是磁盘内容。
例如,用fwrite向文件写入“65”时,文件的磁盘内容就是保存的65(磁盘上以二进制表示)。当用记事本打开文件时,记事本会读到65,并把65看作一个ASCII码,再把对应的字符“A”显示出来。因此屏幕上看到的文本内容是“A”。
而用fprintf向文件写入“65”时,文件的磁盘内容保存的是“6”和“5”这两个字符对应的ASCII码,分别是54和53。因此文件的磁盘内容是54和53。当用记事本打开文件时,记事本读到54,就显示出对应的“6”。再读到53,就显示出对应的“5”。

阅读全文

与文件二进制读取相关的资料

热点内容
变形金刚2超清国语版下载 浏览:816
周星驰赌神系列电影 浏览:895
有一部韩国电影老公是废材老婆开了个美容店 浏览:984
恐怖电影在线观看 浏览:697
啄木鸟 电影 浏览:913
xhmb77 浏览:526
男主角叫顾北的小说 浏览:56
免费60帧电影 浏览:389
霸道狠戾总裁肉文 浏览:593
香港古装三及黄色 浏览:897
外国限制级胸大的电影 浏览:313
台湾男男大尺度电影 浏览:308
香港聊斋系列 浏览:802
能看老电影的网站有哪些 浏览:350
韩国电影女的开美发店 浏览:504
沐光之女免费kan 浏览:43
二龙湖系列电影大全 浏览:280
港片十方是什么电影 浏览:477
主角叫苏绾绾的穿越小说 浏览:985
51定时器2程序 浏览:354

友情链接