|
发表于 2006-10-14 15:19:49
|
显示全部楼层
这个问题我关注很长时间了,很多人问过,很多高手都解答过,
基本答案都是一样的,用指针或者用联合体,性质也是一样的.
但是我试验就是试不出来,像2楼的程序我在pc的标准c,比如tc2.0里面试验则得到:
/*
希望的值是
Arr[0]=33
Arr[1]=31
Arr[2]=34
Arr[3]=31
实际的值是
Arr[0]=208
Arr[1]=15
Arr[2]=73
Arr[3]=64
*/
程序就是2楼的程序,
#include <stdio.h>
volatile float Pi = 3.14159;
unsigned char *Pt;
unsigned char Arr[4];
int main( void )
{
unsigned char i;
Pt = (unsigned char *)(&Pi);
for(i=0; i<4; i++)
{
Arr = *Pt++;
}
printf("%d
",5);
printf("%d
",Arr[0]);
printf("%d
",Arr[1]);
printf("%d
",Arr[2]);
printf("%d
",Arr[3]);
//while(1);
}
在单片机上面试验
USART_Transmit(Arr[0]+48);
USART_Transmit(Arr[1]+48);
USART_Transmit(Arr[2]+48);
USART_Transmit(Arr[3]+48);
从串口发出去,则也是错误的,得到 ?yp 这样几个乱字符.
所以还是得问问,
1.是不是pc里面和单片机里面的浮点数的存储方式不一样?
2.像2楼这个程序,我想一定是能正常工作的,但是我试不出来.应该怎样试验?
很初级的问题,拜托2楼的laoma大侠,或其他过路的高手,能给指点一下,尤其是怎么能试验确认,谢谢. |
|