Re: [问题] 二进制转float.double

楼主: alan23273850   2017-11-08 22:50:27
※ 引述《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 即可。
我没试过,就交给你了。
作者: Lipraxde (Lipraxde)   2017-11-08 23:31:00
都可以当浮点数print了,不直接转成浮点数就好?为什么要先转字串再转回去?
楼主: alan23273850   2017-11-08 23:34:00
因为我不知道有什么函式可以“直接”转成浮点数利用内建函式能自动转换的特性是一个 workaround这也正是原PO要问的重点,不然自己写一个函式根据它的定义慢慢乘起来再相加当然也可,但那就不smart了
作者: Lipraxde (Lipraxde)   2017-11-08 23:37:00
上篇才有人提union捏,这个应该可以拿来用
楼主: alan23273850   2017-11-08 23:37:00
而且其实我也还没试过这段code可不可行,要等原PO对对,我觉得union应该也可以用,期待原PO分享
作者: eecheng87 (EEcheng)   2017-11-09 00:46:00
谢谢各位踊跃的帮忙我,我刚刚已经成功了碍于下礼拜才收作业,我下礼拜再将我的方法分享给大家^^
作者: wei115 (ㄎㄎ)   2017-11-09 11:44:00
刚刚实验过惹,好像不行,但可以用一个float的指标指向int再printf出来,这样是ok的
作者: Lipraxde (Lipraxde)   2017-11-09 11:52:00
因为转型不是直接拿来用,会换算,要不换算的话就要用pointer, union
楼主: alan23273850   2017-11-09 13:08:00
哦哦感谢楼上几位大大,我之后有时间会自己再试一下

Links booklink

Contact Us: admin [ a t ] ucptt.com