C語言將某檔案以二進位制形式開啟,二進位制資料存入一維陣列中!急急急

2022-04-10 06:55:23 字數 5827 閱讀 7851

1樓:匿名使用者

#include

#include

int main()

b=(int*)calloc(j,sizeof(int));//分配一維陣列儲存

rewind(fp1);

for(i=0;i

2樓:匿名使用者

1.fopen函式開啟需要讀取的文字,獲取該檔案的檔案描述符2.使用fscan()函式對檔案進行讀取。

3.放到二維陣列其實就是讀取相應格式的資料,然後對應陣列的每個位置4.檔案中的二進位制資料跟正常的資料是沒有區別的。區別在於如何去輸出他們。

比如在檔案中二進位制資料是 0x0a.你讀到記憶體中其實還是以0x0a 儲存的。如果直接輸出

其值那就是0x0a。如果輸出其ascii碼就是一個換行符了。

例如#include "stdio.h"

#define m 300

#define n 50

void main()

fscanf(fp,"%c",&c);

printf("%x,%c",c,c);

fclose(fp);}

3樓:匿名使用者

/***我不能把整個函式給你編出來,但我這有我實現的將byte->bit , bit->byte的函式,有註解,希望能幫助你。有了這個應該就差不多了***/

位元組流轉為位流:

原理:工作中會遇到將位元組流轉為位流的情況;

位元組流到位流:

unsigned char a = "0123456789abcdef";

unsigned char 意味著 1. 任意16進位制數ru 0xab , 0x45...;

2.任意小於255的十進位制整數(8位),

將位元組轉為位時 如『a』,a = 97 , 則97對應十六進位制數0x01100001 , 每一次將0x01100001右移一位與0x01相與得到每一位的值,存取時

用書組bit[i*max(8) + max - 1 - j]儲存;**實現如下:

void byte_to_bit(const unsigned *byte , int& bytenum , unsigned *bit , int *bitnum)

}*bitnum = counter;

}位流到位元組流:

原理0xff對應的十進位制數值為0x11111111與 int jishu = {128 , 64 , 32 , 16 , 8 , 4 , 2 , 1}對應位相乘相加變得到其值, 或

**實現(1):

void bit_to_byte(const unsigned char * bit , int bitnum , unsigned char *byte , int *bytenum)

*bytenum = bitnum / max;b

}**實現(二):

void bit_to_byte(const unsigned char * bit , int bitnum , unsigned char *byte , int *bytenum)

byte[bnum] = uchtmp;

bnum++;

uchtmp = 0;

}*bytenum = bnum

}函式測試**:

void test_byte_bit()

關於c語言二進位制檔案的問題,怎樣實現將一個**以二進位制的方式存入陣列中,然後又可以寫入檔案中???

4樓:匿名使用者

#include

#include

int main(); //陣列的大小,改成足夠大的fread( str , 1,3,fp);

fclose(fp);

return 0;}

5樓:匿名使用者

這個問題不太清楚,不過檔案的最終儲存方式都是二進位制的資料流,所以你得先把**轉化為二進位制的檔案,那就得用匯編了,得到二進位制檔案後程式就好寫了,在你寫入檔案後要得到**還得在用匯編讓它轉化問**格式。具體怎麼轉化不清楚,c語言裡或許有相應的函式庫。

在c語言中,可以把整型數以二進位制形式存放到檔案中的函式是什麼?

6樓:跳出海的魚

fwrite函式

【補充】:

功功能:

c語言函式,向檔案寫入一個資料塊

2用法:

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+,則從檔案的末尾開始新增,檔案長度加大。

fseek對此函式有作用,但是fwrite[1] 函式寫到使用者空間緩衝區,並未同步到檔案中,所以修改後要將記憶體與檔案同步可以用fflush(file *fp)函式同步。

7樓:匿名使用者

就是fwrite(); fprintf 就已經不是二進位制數了,是字元型了。

8樓:匿名使用者

fwrite是二進位制吧,fprintf應該不是二進位制型別儲存

c語言問題:輸入一個十進位制數,將其轉化為二進位制數後存放在陣列中並輸出

9樓:凌亂心扉

#include

#define uint unsigned int

#define ushort unsigned short

//求2的n次方

int cifang(int n)

return sum;

}//十進位制

正數轉換成二進位制數

uint transform_data_zhengshu(uint frequence,ushort*pwm_table)

return pwm_index-1;

}uint transform_data(int frequence,ushort*pwm_table)

;//負數

if(frequence<0)

//將轉換出來的十進位制數sum加一

sum+=1;

//printf("sum=%d\n",sum);

//最後再轉成二進位制pwm_table

return transform_data_zhengshu(sum,pwm_table);

}//正數

return transform_data_zhengshu(frequence,pwm_table);

}int main();

uint off_set;

off_set=transform_data(frequence,pwm_table);

int i=0;

for(i=off_set;i>=0;i--)

return 0;}

10樓:匿名使用者

源程式如下:#include

void main()

printf("十進位制整數%d轉換為二進位制數是:\n",y);

for(i--;i>=0;i--)

printf("%d",a[i]);//通過陣列輸出printf("\n");

}vc++測試如下:

11樓:匿名使用者

#include

void fun(int n)

for(i = i-1; i >= 0; i--)printf("\n");

}int main()

c語言中如何將一個十進位制整數以二進位制形式輸出

12樓:

#include "stdio.h"

#include

#include

void main()

c語言中使用fread,fwrite函式為什麼一般以二進位制方式開啟檔案,能舉例說明最好 5

13樓:匿名使用者

因為計算機所有的東西都是用二進位制儲存的 比如int儲存4個位元組 char1個位元組

而文字型別的本質就是char*型別 也就是char陣列 , 如果你按本文儲存的話 int型別就要轉化成文字型別 比如123456789 本來只要4位元組儲存 如果轉成文字儲存就是9位元組

而且讀取123456789後要轉化成int型別後才能進行加減乘除各種運算

怎麼解釋呢 不知道你聽懂了沒

簡單的說文字型別本質就是char陣列 用他儲存其他型別對計算機來說很麻煩 所以用二進位制儲存

對人類而言 文字比較方便

對計算機而言 二進位制比較方便

14樓:

可能會丟失精度,1.0/3的結果用文字存和二進位制存,再次讀取出來的結果會不一樣。二進位制還能存陣列,結構一類的資料。

15樓:

因為fread和fwrite是按資料塊的長度來處理輸入輸出的,在字元發生轉換的情況下很可能出現與原設想的情況不同的結果。

詳細參見《c語言程式設計(第2版)》譚浩強 清華大學出版社 p317-p321

c語言中採用二進位制檔案儲存資料的問題

16樓:投機士

在磁碟的儲存上都是二進位制儲存這點上都一樣。

從檔案編碼的方式來看,檔案可分為ascii碼檔案和二進位制碼檔案兩種。

ascii檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ascii碼。例如,數5678的儲存形式為:

asc碼:  00110101 00110110 00110111 00111000

↓     ↓    ↓    ↓

十進位制碼: 5     6    7    8 共佔用4個位元組。ascii碼檔案可在螢幕上按字元顯示, 例如源程式檔案就是ascii檔案,用dos命令type可顯示檔案的內容。

由於是按字元顯示,因此能讀懂檔案內容。

二進位制檔案是按二進位制的編碼方式來存放檔案的。 例如, 數5678的儲存形式為: 00010110 00101110只佔2個位元組。

二進位制檔案雖然也可在螢幕上顯示, 但其內容無法讀懂。

流可以分為兩種型別:文字流和二進位制流。文字流是解釋性的,最長可達255個字元,其中回車/換行將被轉換為換行符「/n」,(如果以"文字"方式開啟一個檔案,那麼在讀字元的時候,系統會把所有的"/r/n"序列轉成"/n",在寫入時把"/n"轉成"/r/n" archim 's opinion )。

二進位制流是非解釋性的,一次處理一個字元,並且不轉換字元。

通常,文字流用來讀寫標準的文字檔案,或者將字元輸出到螢幕或印表機,或者接受鍵盤的輸入;而二進位制流用來讀寫二進位制檔案(例如圖形或字處理文件),或者讀取滑鼠輸入,或者讀寫調變解調器。

如果用文字方式開啟檔案,會把「0d 0a」自動變換成「/n」來存在記憶體中。寫入的時候反向處理。 而二進位制方式開啟的話,就不會有這個過程。

所以從上面可以看出:文字檔案佔磁碟空間大,讀取速度比較慢,但開啟後容易理解;二進位制檔案佔磁碟空間小,讀取速度快,如果要理解檔案檔案的意思需要自己進行解釋。

C語言如何表示二進位制?C語言如何定義二進位制變數?

c語言中二進位制的表示方法。c語言中沒有二進位制的格式輸出符號。你可以用itoa函式很方便的將一個10進位制int轉變成二進位制字串。如 inti chars 128 scanf d i itoa i,s,2 3個引數,第一個是待轉換的數,第二個是存放轉換後的字串,第三個即需要轉換的進位制 prin...

C語言用指標編寫函式,將二進位制數(以字串形式表示)轉換為十進位制數。請給出運算結果

include stdio.h double bintodec char str return x int main int argc,char argv 執行樣例 c語言 將一個十進位制的正整數轉換為二進位制數並輸出結果。十進位制整數轉換為二進位制整數採用 除2取餘,逆序排列 法。具體做法是 用2...

用c語言程式設計,實現十進位制和二進位制的相互轉化

include int getnumber char s,int n return k else return 0 void exchange char s,int n,int k for i 0 ivoid main include int main printf 二進位制為 i for i 0 ...