全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2230
推到 Plurk!
推到 Facebook!

有關轉成Binary的問題

尚未結案
unungigi3000
一般會員


發表:20
回覆:14
積分:6
註冊:2005-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-12-07 21:08:56 IP:140.124.xxx.xxx 未訂閱
各位前輩們,小弟目前遇到一個問題就是如果將數字轉成Binary的檔案,好像不能將我的數據設成double的型態,因為小弟將轉好的Binary檔用UltraEdit來看,好像他是把數據當成文字來轉?? 所以請教前輩們,該如何做,才能達到把double的型態的數據轉成Binary的檔案呢?? 以下是程式碼:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    const int NUMBER_OBJECTS=15;
    double a1 = 100;
    double a2 = 200;
    double a3 = 300;
    class entry
    {
    public:
            double owes;
    };
    entry object_array[NUMBER_OBJECTS];
    ofstream fout("c:\\321.txt",ios_base::binary);
    if(!fout.is_open())
    {
        cerr<<"Error:Could not create file."<     
        
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-08 16:43:09 IP:220.130.xxx.xxx 未訂閱
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    double a1 = 100;
    double a2 = 200;
    double a3 = 300;
    TMemoryStream *P = new TMemoryStream();
    P->Write(a1);
    P->Write(a2);
    P->Write(a3);
    P->SaveToFile(c:\\321.txt);
    delete P;
}        
unungigi3000
一般會員


發表:20
回覆:14
積分:6
註冊:2005-07-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-08 19:53:13 IP:140.124.xxx.xxx 未訂閱
引言:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    double a1 = 100;
    double a2 = 200;
    double a3 = 300;
    TMemoryStream *P = new TMemoryStream();
    P->Write(a1, sizeof(a1));
    P->Write(a2, sizeof(a1));
    P->Write(a3, sizeof(a1));
    P->SaveToFile(c:\\321.txt);
    delete P;
}        
jow前輩,不好意思,小弟執行後,出現矛盾的錯誤耶 但還是謝謝jow前輩,有辦法解決嗎??
unungigi3000
一般會員


發表:20
回覆:14
積分:6
註冊:2005-07-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-12-11 20:31:58 IP:140.124.xxx.xxx 未訂閱
各位前輩們不好意思,是不是double的數字型態不能轉成Binary阿? 不然jow前輩的程式會出現矛盾呢?? 但為什麼UltraEdit可以轉成功呢?? 該用什麼方法?? 小弟還蠻急需要知道的!! 希望前輩們能指點一下迷津!!
引言:
引言:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    double a1 = 100;
    double a2 = 200;
    double a3 = 300;
    TMemoryStream *P = new TMemoryStream();
    P->Write(a1, sizeof(a1));
    P->Write(a2, sizeof(a1));
    P->Write(a3, sizeof(a1));
    P->SaveToFile(c:\\321.txt);
    delete P;
}        
jow前輩,不好意思,小弟執行後,出現矛盾的錯誤耶 但還是謝謝jow前輩,有辦法解決嗎??
unungigi3000
一般會員


發表:20
回覆:14
積分:6
註冊:2005-07-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-12-12 20:09:24 IP:140.124.xxx.xxx 未訂閱
不好意思,我想我表達還是不太好,我想要的是  IEEE-754 Floating-Point Conversion  例如 500轉換後存成binary應該是407F400000000000才對  那小弟該如何寫呢??  至於jow前輩寫的範例,在小弟加上&在P->Write(&a1, sizeof(a1))就可以執行 但出來的結果是想像上面所說的,希望前輩們能指點迷津,謝謝!!    
引言: 各位前輩們不好意思,是不是double的數字型態不能轉成Binary阿? 不然jow前輩的程式會出現矛盾呢?? 但為什麼UltraEdit可以轉成功呢?? 該用什麼方法?? 小弟還蠻急需要知道的!! 希望前輩們能指點一下迷津!!
引言:
引言:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    double a1 = 100;
    double a2 = 200;
    double a3 = 300;
    TMemoryStream *P = new TMemoryStream();
    P->Write(a1, sizeof(a1));
    P->Write(a2, sizeof(a1));
    P->Write(a3, sizeof(a1));
    P->SaveToFile(c:\\321.txt);
    delete P;
}        
jow前輩,不好意思,小弟執行後,出現矛盾的錯誤耶 但還是謝謝jow前輩,有辦法解決嗎??
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-12-13 13:17:33 IP:220.130.xxx.xxx 未訂閱
當a1=100; a2=200; a3=500;
content of output file:
00000000h 00 00 00 00 00 00 59 40 00 00 00 00 00 00 69 40
00000010h 00 00 00 00 00 40 7F 40    其中00000010h 00 00 00 00 00 40 7F 40應該是你要的結果,
如果你實際要的資料排列順序為407F400000000000那麼你可能要作資料轉換
以符合你的需求,因為double內存方式就上例而言High Byte存放在較低的位址
Low Byte則存放在較高的位址,而整數型態又是不同的排列方式,所以有需要時
你在Data I/O上應該要多一道轉換的動作.    
unungigi3000
一般會員


發表:20
回覆:14
積分:6
註冊:2005-07-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-12-13 16:56:44 IP:140.124.xxx.xxx 未訂閱
不好意思,jow前輩,小弟的程式執行後開321.txt出來的東西也不是jow前輩所說的那樣形式耶,用UltraEdit開後,完全不是數字的型態耶!! 好像是文字!! 那程式是哪裡出錯了呢??    
引言:
當a1=100; a2=200; a3=500;
content of output file:
00000000h 00 00 00 00 00 00 59 40 00 00 00 00 00 00 69 40
00000010h 00 00 00 00 00 40 7F 40    其中00000010h 00 00 00 00 00 40 7F 40應該是你要的結果,
如果你實際要的資料排列順序為407F400000000000那麼你可能要作資料轉換
以符合你的需求,因為double內存方式就上例而言High Byte存放在較低的位址
Low Byte則存放在較高的位址,而整數型態又是不同的排列方式,所以有需要時
你在Data I/O上應該要多一道轉換的動作.    
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-12-13 18:25:02 IP:220.130.xxx.xxx 未訂閱
你要點一下UltraEdit上面有一個H標示的按鍵,以Hex的方式顯示
unungigi3000
一般會員


發表:20
回覆:14
積分:6
註冊:2005-07-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-12-13 20:56:09 IP:140.124.xxx.xxx 未訂閱
引言: 你要點一下UltraEdit上面有一個H標示的按鍵,以Hex的方式顯示
不好意思,jow前輩,小弟有按了,但轉出來的不是原來的耶!! 如圖:
系統時間:2024-04-28 16:46:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!