使用memcpy C ++浮点精度

时间:2014-12-15 21:50:06

标签: c++ floating-point memcpy floating-point-precision floating-point-conversion

我有一个棘手的问题,我不明白。我有一个uint8_t数组,我需要转换为32位浮点数。我正在使用memcpy来实现这一点......但是四舍五入似乎是关闭的。有人可以提前解释一下这个问题的解释/解决方案。 coefficientByteSwap数组包含两个系数,一个在前四个字节中,另一个在后四个字节中。

static float32_t coefficient[ALLSENSORS][NUM_QUADRATIC_FIELDS];
uint8_t coefficientByteSwap[8];


memcpy(&coefficient[sensor][2], &coefficientByteSwap[0], sizeof(float32_t));
memcpy(&coefficient[sensor][3], &coefficientByteSwap[4], sizeof(float32_t));

示例:

coefficientByteSwap[0] = 0xE8
coefficientByteSwap[1] = 0x32
coefficientByteSwap[2] = 0xB5
coefficientByteSwap[3] = 0xBC

应为浮点值:-.022119 但是当我把它打印出来时它出来了:-.022119000554

1 个答案:

答案 0 :(得分:3)

你的假设是错误的。 看看这个:

float f = -.022119;
std::cout << std::setprecision(20) << f << std::endl;

打印: -0.022119000554084778