Re: [問題] 二進位轉float.double
看板C_and_CPP作者alan23273850 (God of Computer Science)時間8年前 (2017/11/08 22:50)推噓2(2推 0噓 14→)留言16則, 4人參與討論串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
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
11/08 23:35, 4F
→
11/08 23:36,
8年前
, 5F
11/08 23:36, 5F
→
11/08 23:37,
8年前
, 6F
11/08 23:37, 6F
→
11/08 23:37,
8年前
, 7F
11/08 23:37, 7F
→
11/08 23:37,
8年前
, 8F
11/08 23:37, 8F
→
11/08 23:38,
8年前
, 9F
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
11/09 11:44, 12F
→
11/09 11:44,
8年前
, 13F
11/09 11:44, 13F
→
11/09 11:52,
8年前
, 14F
11/09 11:52, 14F
→
11/09 11:52,
8年前
, 15F
11/09 11:52, 15F
→
11/09 13:08,
8年前
, 16F
11/09 13:08, 16F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):