Мне нужно сохранить значение с плавающей запятой, которое является скопированной памятью, из целочисленного значения.В функции reinterpretedFloat
я сделал примерное целое число и скопировал память в переменную типа float.Дело в том, что значение изменяется, когда значение с плавающей запятой memcpy возвращает .
Вот пример кода.
#include <stdio.h>
#include <stdint.h>
void printHex(const unsigned char* buff, int count)
{
printf("0X");
for (int i = 0; i < count; ++i)
{
printf("\t%X", buff[i]);
}
printf("\n");
}
float reinterpretedFloat()
{
int32_t value = 0x7F845E58;
float tmp;
memcpy(&tmp, &value, sizeof(float));
printHex(reinterpret_cast<const unsigned char*>(&tmp), 4); //memcpy
return tmp;
}
int main()
{
float newFloat = reinterpretedFloat();
printHex(reinterpret_cast<const unsigned char*>(&newFloat), 4); //returned value
return 0;
}
Это результат.
0X 58 5E 84 7F(memcpy)
0X 58 5E C4 7F(returned value)
То, что я ожидал, было 0X 58 5E 84 7F
...
Любое тело может объяснить, почему это происходит?В конфигурации x64 этого не происходит.