作者alan23273850 (God of Computer Science)
看板C_and_CPP
標題Re: [問題] 二進位轉float.double
時間Wed Nov 8 22:50:27 2017
※ 引述《eecheng87 (EEcheng)》之銘言:
: 如題,我想輸入010011......想得到output 為 浮點數
: 我的方法是 將0100....讀成字串(char陣列) 在讀陣列0,1..看看是0還是1
: ,在賦值給整數陣列,再拿這些整數陣列用IEEE的方法算回float,double.
: 這個方法感覺可行,想和各位大大請教是否有更smart的方法可以分享??
其實真正引起我好奇的地方是,直接用型態轉型可不可行?
int my_int = 0;
int arr[32];
for(int i=0; i<32; i++) {
my_int <<= 1;
my_int += arr[i];
}
這樣會得到一個整數 my_int,這 32 個 bit 就包含了你要的資訊,
接著試著印出 printf("
%f\n", my_int),會不會是 IEEE754 的結果,
如果是的話,應該可先用 sprintf(str_float, "
%f", my_int) 轉成 float string,
再透過 my_flaot = atof(str_float) 轉成真正的浮點數。
如果途中遇到 big endian 或 little endian 的問題,做 bit reversal 即可。
我沒試過,就交給你了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.38.80
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1510152632.A.D64.html
1F:→ Lipraxde: 都可以當浮點數print了,不直接轉成浮點數就好?為什麼 11/08 23:31
2F:→ Lipraxde: 要先轉字串再轉回去? 11/08 23:31
3F:→ alan23273850: 因為我不知道有什麼函式可以「直接」轉成浮點數 11/08 23:34
4F:→ alan23273850: 利用內建函式能自動轉換的特性是一個 workaround 11/08 23:35
5F:→ alan23273850: 這也正是原PO要問的重點,不然自己寫一個函式根據它 11/08 23:36
6F:→ alan23273850: 的定義慢慢乘起來再相加當然也可,但那就不smart了 11/08 23:37
7F:→ Lipraxde: 上篇才有人提union捏,這個應該可以拿來用 11/08 23:37
8F:→ alan23273850: 而且其實我也還沒試過這段code可不可行,要等原PO 11/08 23:37
9F:→ alan23273850: 對對,我覺得union應該也可以用,期待原PO分享 11/08 23:38
10F:推 eecheng87: 謝謝各位踴躍的幫忙我,我剛剛已經成功了 11/09 00:46
11F:→ eecheng87: 礙於下禮拜才收作業,我下禮拜再將我的方法分享給大家^^ 11/09 00:47
12F:推 wei115: 剛剛實驗過惹,好像不行,但可以用一個float的指標指向in 11/09 11:44
13F:→ wei115: t再printf出來,這樣是ok的 11/09 11:44
14F:→ Lipraxde: 因為轉型不是直接拿來用,會換算,要不換算的話就要用po 11/09 11:52
15F:→ Lipraxde: inter, union 11/09 11:52
16F:→ alan23273850: 哦哦感謝樓上幾位大大,我之後有時間會自己再試一下 11/09 13:08