看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/C_and_CPP/M.1510152632.A.D64.html
Lipraxde: 都可以當浮點數print了,不直接轉成浮點數就好?為什麼 11/08 23:31
Lipraxde: 要先轉字串再轉回去? 11/08 23:31
alan23273850: 因為我不知道有什麼函式可以「直接」轉成浮點數 11/08 23:34
alan23273850: 利用內建函式能自動轉換的特性是一個 workaround 11/08 23:35
alan23273850: 這也正是原PO要問的重點,不然自己寫一個函式根據它 11/08 23:36
alan23273850: 的定義慢慢乘起來再相加當然也可,但那就不smart了 11/08 23:37
Lipraxde: 上篇才有人提union捏,這個應該可以拿來用 11/08 23:37
alan23273850: 而且其實我也還沒試過這段code可不可行,要等原PO 11/08 23:37
alan23273850: 對對,我覺得union應該也可以用,期待原PO分享 11/08 23:38
eecheng87: 謝謝各位踴躍的幫忙我,我剛剛已經成功了 11/09 00:46
eecheng87: 礙於下禮拜才收作業,我下禮拜再將我的方法分享給大家^^ 11/09 00:47
wei115: 剛剛實驗過惹,好像不行,但可以用一個float的指標指向in 11/09 11:44
wei115: t再printf出來,這樣是ok的 11/09 11:44
Lipraxde: 因為轉型不是直接拿來用,會換算,要不換算的話就要用po 11/09 11:52
Lipraxde: inter, union 11/09 11:52
alan23273850: 哦哦感謝樓上幾位大大,我之後有時間會自己再試一下 11/09 13:08