我需要保存一个浮点值,它是一个整数值的复制内存.
在reinterpretedFloat函数中,我创建了一个样本整数并将内存复制到float变量.
当memcpy-ed float返回时,值就会发生变化.
在reinterpretedFloat函数中,我创建了一个样本整数并将内存复制到float变量.
当memcpy-ed float返回时,值就会发生变化.
这是示例代码.
- #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配置中,这不会发生.