線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1733
推到 Plurk!
推到 Facebook!

用fwrite存array 後,叫出來為何是ASCII碼..

尚未結案
jchuang
一般會員


發表:41
回覆:36
積分:15
註冊:2003-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-20 22:30:18 IP:140.123.xxx.xxx 未訂閱
deal all: 我在turbo C下用fwrite存array 後,叫出來為何是ASCII碼??     
#include 
#include     void main(void)
{
    FILE *fp;
    int i,a[10];
    for (i=0;i<=10;i  ) a[i]=i;        if((fp==fopen("aa.txt","wb"))==NULL)
      {
         printf("file open error"); exit(1);
      }
    fwrite(&a,sizeof(int),10,fp);
    fclose(fp);    }
 
這樣子再呼叫出來為何是ASCII碼,而不是0 1 2 3 4 5 6 7 8 9 呢? 新手上路
------
新手上路
derrenbol1
中階會員


發表:5
回覆:113
積分:93
註冊:2004-12-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-21 01:48:59 IP:210.202.xxx.xxx 未訂閱
To jchuang:    1. 你應該將a陣列改成char型別; 當然用fwrite寫進去時, 應該是      
     fwirte(&a, sizeof(char), 10, fp);
     
2. 在你給a陣列的for迴圈中, 應該改成下面
     for(i=0;i<10;i  )
         a[i] = (char)(i 0x30);
     
仔細一看才發現你i計數還多做了一次, 小心哦; 我猜你誤會了, 你看到 不叫做ASCII, 是HEX CODE(十六進制碼). 在ACSII的定義中, 數字字元 '0','1','2',... 的HEX CODE是從0x30開始, 所以你想要讀出來被顯示 為0123... 的話, 你寫進去時就得多加0x30. 原本你這段程式碼執行完 後的輸出檔(aa.txt), 用UltraEdit去讀出來的話, 應該會被當成十六進 制檔案顯示, 其內容為 : 0x01 , 0x00 , 0x02 , 0x00 , ..... so on 請參考 發表人 - derrenbol1 於 2005/10/21 01:50:41
jchuang
一般會員


發表:41
回覆:36
積分:15
註冊:2003-08-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-21 06:41:23 IP:140.123.xxx.xxx 未訂閱
謝謝derrenbol1的回答,因為我是將類比的電壓經由8051傳到電腦,其為8bit的值,所以真捉到的值為0~255,所以想請問一下,要如何才可以存成十進制的呢?? 新手上路
------
新手上路
derrenbol1
中階會員


發表:5
回覆:113
積分:93
註冊:2004-12-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-21 07:15:05 IP:210.202.xxx.xxx 未訂閱
To jchuang :      你試試看用fprintf取代fwrite.      
  #include 
  #include       void main(void)
  {
     FILE *fp;
     int i,a[10];
     for (i=0;i<10;i  ) a[i]=i;         if((fp==fopen("aa.txt","wb"))==NULL)
     {
         printf("file open error"); exit(1);
     }
     
     for( i = 0 ; i < 10 ; i    )
            fprintf(fp, "d ",a[i]);         fclose(fp);
  }
  
以上程式的結果僅讓你參考, 10個值而已應該是不須要做什麼處理. 不然的話你還可以:
  for( i = 0 ; i < 10 ; i    )
     fprintf(fp, "第d 取樣值 = d\n", i 1, a[i]);
  
這樣排起來應該會比較好看點. fwrite通常被拿做raw data檔案輸 出居多, 而fprintf的話則是可以做些文字顯示處理, 它與printf函 數是一樣的, 更準確的說, printf只是fprintf的衍生, 因為printf 只針對"標準輸出設備", 也就是螢幕. 在作業系統的定義下, "設備" 對它而言也只是一種檔案而已, 扯太多了. 請參考
jchuang
一般會員


發表:41
回覆:36
積分:15
註冊:2003-08-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-21 16:55:07 IP:140.123.xxx.xxx 未訂閱
thanks for derrenbol1 ans,I will try it . 新手上路
------
新手上路
系統時間:2024-05-11 0:50:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!