作者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/cn.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