c語言二進制寫入
❶ c語言 結構體指針字元 二進制文件寫入和讀取
打開方式用二進制方式打開,如
FILE
*fp
=
fopen("a.zip","rb+");然後讀用fread去讀。
1、對於程序來說,不管後綴名如何,文件分為兩種類型:文本文件和二進制文件。
2、C語言里有一系列文件操作函數。區分文本和二進制文件,需要在打開文件時設置不同的控制符mode的變數即可。
fopen的函數原型:FILE
*
fopen(const
char
*
path,const
char
*
mode);
fopen函數的第一個參數是文件路徑,第二個參數是打開方式,有以下幾種方式:
r
以只讀方式打開文件,該文件必須存在。
r+
以可讀寫方式打開文件,該文件必須存在。
rb+
讀寫打開一個二進制文件,允許讀數據。
rw+
讀寫打開一個文本文件,允許讀和寫。
w
打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。
w+
打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
a
以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
a+
以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。
(原來的EOF符不保留)
wb
只寫打開或新建一個二進制文件;只允許寫數據。
wb+
讀寫打開或建立一個二進制文件,允許讀和寫。
wt+
讀寫打開或著建立一個文本文件;允許讀寫。
at+
讀寫打開一個文本文件,允許讀或在文本末追加數據。
ab+
讀寫打開一個二進制文件,允許讀或在文件末追加數據。
上述的形態字元串都可以再加一個b字元,如rb、w+b或ab+等組合,加入b
字元用來告訴函數庫打開的文件為二進制文件,而非純文字文件。
❷ 在C語言中,以二進制的形式寫入文件中,然後讀到DOS界面中以其他類型的形式顯示
public String download() throws Exception{
//得到文件的真實路徑
ServletContext sc = ServletActionContext.getServletContext();
String filePath = sc.getRealPath("/WEB-INF/classes/26.jpg");
//構建輸入流
imageInputStream = new FileInputStream(filePath);
//用stream結果視圖輸出
//返回邏輯視圖
return SUCCESS;
}
}
❸ c語言 二進制寫入數據
temp 本身已經是地址了,所以這句中&要去掉
fwrite (&temp,sizeof(struct Host),1,fp);
==》
fwrite (temp,sizeof(struct Host),1,fp);
但是你這么做,寫的時候沒問題 讀取文件時會有問題,讀取時記得為每個指針分配空間
❹ c語言怎麼二進制文件操作
主要就是二進制文件的讀寫、結構體的定義和使用。
fopen函數 以 "ab+" 方式打開文件,用fwrite函數寫入內容; "b" 方式打開文件,讀取內容;
❺ c語言如何讀寫二進制
詳細:http://hi..com/gibbon_ho/blog/item/9ca853e68447c42bb9382086.html
我一直覺得二進制文件讀寫是個很容易的事,所以一直沒在意,最近在寫一個http客戶端,實現文件下載的時候,發現總有問題,後來才發現是忘記寫文件用二進制方式,慚愧的很啊。然後,就在網上搜索了一下,發現通過C語言實現二進制文件讀寫的資料居然出奇的少,這讓我很憤怒,因為雖然這東西很簡單,但是對於初學者,往往會需要花很長的時間去弄,一旦明白,又發現花的時間很不值得,罷了,這里通過一個文件拷貝的例子來講講二進制文件的讀寫吧。先介紹函數,我們一共要用到三個函數,fopen,fread,fwrite。二進制讀寫的順序是用fopen以二進制方式打開讀寫文件,然後使用fread和fwrite兩個函數將數據寫入二進制文件中。下面我們看看一個拷貝程序的源碼:
Copy.c:#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 1024
int main(int argc, char *argv[])
{
if( argc < 3 )
{
printf("usage: %s %s\n", argv[0], "infile outfile");
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);
}
int rc;
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;
}
❻ C語言二進制數怎麼寫
c語言中沒有二進制的格式輸出符號.
你可以用itoa函數很方便的將一個10進制int轉變成二進制字元串.
如:
int i;
char s[128];
scanf("%d",&i);
itoa(i, s, 2); /*3個參數,第一個是待轉換的數,第二個是存放轉換後的字元串,第三個即需要轉換的進制*/
printf("該數轉換為二進制是: [%s]\n",s);
補充一點,itoa函數的頭文件是stdlib.h
(你自己不查以前已經有的問題)
❼ 急求!C語言中將二進制文件寫入數組並輸出為ASCII文件格式!
下面是剛寫的程序
#include<stdio.h>
#include<math.h>
void
main()
{
char
n;
int
a[100],i,j=0,m;
printf("請輸入二進制碼的位數(小於100位)\n");
scanf("%d",&m);
printf("請輸入該二進制碼,每個二進制碼之間用enter隔開\n");
for(i=0;i<m;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
j+=a[i]*pow(2,m-i-1);
printf("%d\n",j);
n=j+'0';
printf("該二進制文件的ASCll碼是:
\n");
printf("%d\n",n);
}你可以根據自己的需要更改要輸入的二進制的量
❽ C語言 數據寫入二進制文件錯誤
二進制文件你用記事本打開應該就只能看到亂碼吧,記事本不是打開文本文件(ASCII文件)嗎。只要你寫入正確,讀出來也會沒問題的。
c:\delete\litl1.dat這樣寫路徑好像不對,在C語言中應該寫成:c:\\delete\\litl1.dat。因為在C語言中兩個'\'才相當於一個單撇號。
加上頭文件:#include<stdlib.h>,exit()函數用到。
還有,最好不要在C盤下操作,我的系統在C盤下刪除文件夾及創建都需要管理員許可權的。如果真想按你寫的路徑創建這個文件,delete這個文件夾必須存在。
試試這樣:
為了證明我的說法,我又定義了一個數組,把文件中數據讀入這個數組並輸出.
#include "stdio.h"
#include<stdlib.h>
main()
{FILE *fp;
int a[10],*p=a;
if((fp=fopen("d:litl1.dat","wb+"))==NULL)//wb改成wb+,這樣寫完以後進行讀操作
{
printf("file not open!\n");
exit(0);
};
while(p<a+10)
scanf("%d",p++);
printf("\n\n\n");
p=a;
for(;p<a+10;p++)
printf("%5d",*p);
printf("\n");
fwrite(a,sizeof(int),10,fp);
int b[10],i;
rewind(fp);//使文件指針指向文件開始
fread(b,sizeof(int),10,fp);
for(i=0;i<10;i++)
printf("%5d",b[i]);
printf("\n");
fclose(fp);
}
❾ C語言二進制流寫入文件
我提個思路。位元組是計算機操作的實際最基本單位,任何地址只能精確到位元組而無法精確到位的。
所以LZ一定要將位整合到以位元組為單位才能進行其他操作。可以這么做,將二進制流按照每8位一個單位裝成一個位元組,並明確好位元組之間的順序,位元組內高低位的順序,最後末尾不足的要塞一些沒意義的但LZ要知道的位湊足成位元組。這裡面當然必須反復用到位運算。
通常的做法是位元組之間的順序按照自然位元組地址由小到大順序,位元組內低位在前。比如對於已經整合成位元組的位元組流a[N],查看第 i 個位(從0起)的演算法是 a[i/8] & (1<<(i%8))。
不同的位序約定會稍有不同位操作