Re: [問題] 二進位轉float.double

看板C_and_CPP作者 (God of Computer Science)時間8年前 (2017/11/08 22:50), 編輯推噓2(2014)
留言16則, 4人參與, 8年前最新討論串2/4 (看更多)
※ 引述《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

11/08 23:31, 8年前 , 1F
都可以當浮點數print了,不直接轉成浮點數就好?為什麼
11/08 23:31, 1F

11/08 23:31, 8年前 , 2F
要先轉字串再轉回去?
11/08 23:31, 2F

11/08 23:34, 8年前 , 3F
因為我不知道有什麼函式可以「直接」轉成浮點數
11/08 23:34, 3F

11/08 23:35, 8年前 , 4F
利用內建函式能自動轉換的特性是一個 workaround
11/08 23:35, 4F

11/08 23:36, 8年前 , 5F
這也正是原PO要問的重點,不然自己寫一個函式根據它
11/08 23:36, 5F

11/08 23:37, 8年前 , 6F
的定義慢慢乘起來再相加當然也可,但那就不smart了
11/08 23:37, 6F

11/08 23:37, 8年前 , 7F
上篇才有人提union捏,這個應該可以拿來用
11/08 23:37, 7F

11/08 23:37, 8年前 , 8F
而且其實我也還沒試過這段code可不可行,要等原PO
11/08 23:37, 8F

11/08 23:38, 8年前 , 9F
對對,我覺得union應該也可以用,期待原PO分享
11/08 23:38, 9F

11/09 00:46, 8年前 , 10F
謝謝各位踴躍的幫忙我,我剛剛已經成功了
11/09 00:46, 10F

11/09 00:47, 8年前 , 11F
礙於下禮拜才收作業,我下禮拜再將我的方法分享給大家^^
11/09 00:47, 11F

11/09 11:44, 8年前 , 12F
剛剛實驗過惹,好像不行,但可以用一個float的指標指向in
11/09 11:44, 12F

11/09 11:44, 8年前 , 13F
t再printf出來,這樣是ok的
11/09 11:44, 13F

11/09 11:52, 8年前 , 14F
因為轉型不是直接拿來用,會換算,要不換算的話就要用po
11/09 11:52, 14F

11/09 11:52, 8年前 , 15F
inter, union
11/09 11:52, 15F

11/09 13:08, 8年前 , 16F
哦哦感謝樓上幾位大大,我之後有時間會自己再試一下
11/09 13:08, 16F
文章代碼(AID): #1Q0ncura (C_and_CPP)
文章代碼(AID): #1Q0ncura (C_and_CPP)