我有正弦函数(对于一个正弦波,取样值= 4096)。我希望相应的浮点数转换为整数值.Float值像.001534十六进制,如3AC90FD6和相应的int值为986255318.当我尝试绘制图形时,它将为所有浮点值而不是整数值.... 。
这是我用过的逻辑......并且无法像将值乘以100那样进行缩放,因为这是不可接受的...请帮助我,我是c的新手。
#include <stdio.h>
#include <string.h>
#include<math.h>
union {
float f;
unsigned char b[sizeof(float)];
long g[sizeof(float)];
} v;
int main(void)
{
float temp,d;
int r;
temp = ((2 * M_PI) / 4096);
size_t i;
for(i = 0; i < 4096; i++)
{
d = sin (temp * i );
v.f = d;
printf("\n %f \t %X", v.f, ( ( v.b[0] ) | ( v.b[1] << 8 ) | ( v.b[2] << 16 ) | ( v.b[3] << 24 ) ));
printf(" \t %d \n",(( v.g[0] ) | ( v.g[1] << 8 ) | ( v.g[2] << 16 ) | ( v.g[3] << 24 ) ));
}
return 0;
}
答案 0 :(得分:0)
要将float转换为相应的整数,您不应该简单地取位并将它们重新解释为整数。
简单地说:
int i = (int)myFloat;
这将导致从float
的内部格式转换为int
。 float
的小数部分将被截断,因此它将向下舍入为0。
由于您的值是正弦调用的结果,因此它们将在[-1.0f,1.0f]范围内。如果您想要在[-4096,4096]范围内拥有值,只需执行以下操作:
int i = (int)(4096 * myFloat);