導航:首頁 > 文件教程 > 文件二進制讀取

文件二進制讀取

發布時間: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」。

閱讀全文

與文件二進制讀取相關的資料

熱點內容
win10如何修改hosts文件 瀏覽:971
iphone的未接來電 瀏覽:134
如何新建一個文件夾word文檔 瀏覽:74
零售商運用了什麼樣的大數據 瀏覽:557
榮耀分身微信清理es文件瀏覽器 瀏覽:682
linux賬戶設置密碼 瀏覽:69
查看資料庫各表記錄數 瀏覽:968
linux查看文件的行數 瀏覽:692
fpga約束文件如何自動生成 瀏覽:377
linux打開的文件數 瀏覽:973
win8修改公用網路 瀏覽:324
linuxlcrt 瀏覽:30
編程里res是什麼意思 瀏覽:616
dm80082版本固件 瀏覽:37
蘋果手機用什麼可以打開psd文件 瀏覽:627
服務號和小程序的區別 瀏覽:888
360手機助手qq文件位置 瀏覽:693
如何學習數碼編程 瀏覽:60
微信消息發布出去 瀏覽:377
windows文件名一個個消失 瀏覽:907

友情鏈接