二進制檔案 |
答題得分者是:yorkland
|
yshihyu
一般會員 發表:23 回覆:18 積分:8 註冊:2006-11-28 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">#include
if((fp=fopen("list.txt","wb "))==NULL) // 我這邊用wb 二進制檔案 書上說例如值輸入5678 那我文件list 裡面應該是以二進制去存應該為00010110 00101110 不過我看他還是直接以5678表示 想請問這是怎麼回事?? 1.書上說二進制表示法比ASCII 更省空間 , 那什麼情況下要去使用ASCII 或是 二進制??? 2.二進制可以表示A~Z 或是一些特殊的字元嗎??? 因為我看書上都是舉例10進制數字, 還是二進制表示只能存放數字??? 謝謝 |
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
以下個人的理解, 僅供參考。
上述提到的二進制, 指的應該是Binary File。 例如: 型別Word是2個Bytes, 但它可以儲存0..65535的數字。 如果用Binary的方式儲存, 例如要儲存數字5678時, 以Ascii至少要花4個Chars(Bytes)儲存, 數字位元越多, 所需的Bytes數也越大, 但是只要數字範圍在65535以內的, 以Binary模式只要花2個Bytes。 書裡頭的意思可能是這樣, 一般來說, 如果要寫檔, 儲存數字類的資料(如: Int, Double, Word, DWord, DateTime...), 我會以Binary的方式寫檔。文字型的(String, Char...)也只能用Char(Ascii)的方式填資料。 |
yshihyu
一般會員 發表:23 回覆:18 積分:8 註冊:2006-11-28 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code">/* prog 12-13,文字模式儲存1000個亂數值 */
#include
上面兩個是書上範例在說明Ascii 與 Binary 存放檔案大小 文字模式需要 1000 * 10 1000(空格) = 11000 byte 二進制模式需要 只需要4000 byte 我的疑問是我把 fptr1=fopen("c:\\c_prog\\abc.txt","w"); 改成 wb 大小還是 11000byte 是二進制不能用 fprintf() 函式去存嗎?? 只能用fwrite() 去存二進制是這樣嗎??? fprintf() 函式好像參數無2進制 還有fwrite(&buffer,sizeof(int),1,fptr1); // 這邊sizeof(int) 是指文件檔一個區塊可以存4byte 大小的整數資料嗎??? 謝謝 |
yshihyu
一般會員 發表:23 回覆:18 積分:8 註冊:2006-11-28 發送簡訊給我 |
===================引 用 文 章=================== 以下個人的理解, 僅供參考。 上述提到的二進制, 指的應該是Binary File。 例如: 型別Word是2個Bytes, 但它可以儲存0..65535的數字。 如果用Binary的方式儲存, 例如要儲存數字5678時, 以Ascii至少要花4個Chars(Bytes)儲存, 數字位元越多, 所需的Bytes數也越大, 但是只要數字範圍在65535以內的, 以Binary模式只要花2個Bytes。 書裡頭的意思可能是這樣, 一般來說, 如果要寫檔, 儲存數字類的資料(如: Int, Double, Word, DWord, DateTime...), 我會以Binary的方式寫檔。文字型的(String, Char...)也只能用Char(Ascii)的方式填資料。 __________________________________________________________________________________________________ 那二進制也是可以表示 A~ Z 英文字嗎??? 如果我要存放的資料有(字串數字都有) 那只能用ASCII 去表示嗎??? 二進制感覺應該也可以表示字串是吧??? 謝謝 |
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
|
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
附上一小段程式給你參考, 希望有助於你。
一般寫檔的資料結構要讓使用者知道, 例如常用的圖檔, 如BMP, TIF等... 裡頭包含了各種資訊, 如圖檔尺寸, 發行公司的資料, 解析度, 彩度, Pixel Data... 都有一定的規則, 告訴使用者如何解析Binary File。 procedure TForm1.Button1Click(Sender: TObject); var F: File; Str: Array [0..9] of Char; Value: Double; FileName: String; begin FileName:='C:\Test.bin'; // Write data to file. AssignFile(F,FileName); Rewrite(F,1); // 前面10個Bytes以文字方式寫入.. Str:='TEXT AREA1'; BlockWrite(F,Str,Length(Str)); Value:=1000.001; BlockWrite(F,Value,SizeOf(Double)); CloseFile(F); // ************************************** // Try to read the data AssignFile(F,FileName); Reset(F,1); BlockRead(F,Str,Length(Str)); ShowMessage(Str); BlockRead(F,Value,SizeOf(Double)); ShowMessage(FloatToStr(Value)); CloseFile(F); end; |
yshihyu
一般會員 發表:23 回覆:18 積分:8 註冊:2006-11-28 發送簡訊給我 |
===================引 用 文 章=================== <textarea class="cpp" rows="10" cols="60" name="code">/* prog 12-13,文字模式儲存1000個亂數值 */ #include 上面兩個是書上範例在說明Ascii 與 Binary 存放檔案大小 文字模式需要 1000 * 10 1000(空格) = 11000 byte 二進制模式需要 只需要4000 byte 我的疑問是我把 fptr1=fopen("c:\\c_prog\\abc.txt","w"); 改成 wb 大小還是 11000byte 是二進制不能用 fprintf() 函式去存嗎?? 只能用fwrite() 去存二進制是這樣嗎??? fprintf() 函式好像參數無2進制 還有fwrite(&buffer,sizeof(int),1,fptr1); // 這邊sizeof(int) 是指文件檔一個區塊可以存4byte 大小的整數資料嗎??? 謝謝 _____________________________________________________________________________________________ 我還剩下上面的疑問 謝謝 |
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
yshihyu
一般會員 發表:23 回覆:18 積分:8 註冊:2006-11-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |