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

請教如何將大位元(Big Endian)的浮點數,轉換到小位元(Little Endian)的浮點數

尚未結案
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-11 16:52:49 IP:203.64.xxx.xxx 未訂閱
小弟找過相關文章,但沒有找到可以解決小弟的問題,因此請教各位大大 起因: 小弟目前工作是將在solaris 作業系統產生的影像檔,轉換成在windows上的影像檔。遇到問題 浮點數型態(Float)的轉換 小弟先建之自定型態: struct mhdr { char magic_mumber[14]; char original_file_name[32]; unsigned char sw_version[2]; unsigned char system_type[2]; unsigned char file_type[2]; char serial_number[10]; int scan_start_time; char isotope_name[8]; unsigned char isotope_halflife[4]; ........ }; mhdr hdr; 接著再以fopen來讀檔 if(OpenDialog1->Execute()) { AnsiString filename=OpenDialog1->FileName; int in; FILE *ptr; ptr=fopen(filename.c_str(),"r"); fread(&hdr,sizeof(hdr),1,ptr); fclose(ptr); } 問題, float UnixFloatToIntelFloat(unsigned char *b) { float *f; float ff; char c[4]; c[0]=b[2]; c[1]=b[3]; c[2]=b[1];c[3]=b[0];//這是我亂排列組合後,還未修改的順序 f=(float*) c; return (ff); } 則不管如何將b的byte如何排列組何,都無法算出正確的值 小弟知道大位元的順序如是是 1234,則小位元則應該 4321 例如 01 02 03 04 要變成 04 03 02 01 但,無論如何排列,都無法表現出正確的值(在原電腦看到的數字) 用手算的值跟正確的值是一樣的 請問大大,這是BCB的問題或小弟那裡有疏忽之處 謝謝回答
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-11 19:16:26 IP:203.64.xxx.xxx 未訂閱
剛剛跟朋友討論了一下 發現是位置抓錯了 不過,小弟的struct沒設錯,小弟是依照說明書上的來設 這又引出另一個問題 設struce時,它的位置會隨著裡面資料型態愈多,而位置愈不正確嗎??
Albertz
初階會員


發表:2
回覆:57
積分:31
註冊:2002-09-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-12 09:38:57 IP:211.20.xxx.xxx 未訂閱
#pragma pack(push) #pragma pack(1) struct mhdr { char magic_mumber[14]; char original_file_name[32]; unsigned char sw_version[2]; unsigned char system_type[2]; unsigned char file_type[2]; char serial_number[10]; int scan_start_time; char isotope_name[8]; unsigned char isotope_halflife[4]; ........ }; #pragma pack(pop) 另外, UnixFloatToIntelFloat 可以使用 "bswap" 指令加快速度. float UnixFloatToIntelFloat(unsigned int *b) { float result; result = *(float*)b; asm{ mov eax, result; bswap eax; mov result, eax } return (result); }
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-15 17:14:12 IP:203.64.xxx.xxx 未訂閱
謝謝大大的回應,讓小弟的程式更完善 不過,小弟覺得在做讀檔的工作時 像小弟這樣,先建structure,再讀進 可能會發生一些錯誤,例如原本設定好的位置,可能就多讀一,二位 (小弟之前做另一個轉檔的程式也發生如此的事) 似乎沒有人注意到,但很大的可能是小弟對位置的判斷錯誤(雖然連續二次程式都有發生同樣的問題) 不管如何,謝謝大大的回應
系統時間:2024-09-07 10:37:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!