間違った結果を出力しているこのコードがあります。
#include <stdio.h>
#include <string.h>
int main()
{
unsigned char bytes[4];
float flt=0;
bytes[0]=0xde;
bytes[1]=0xad;
bytes[2]=0xbe;
bytes[3]=0xef;
memcpy( &flt, bytes, 4);
printf("bytes 0x%x float %e\n", flt, flt);
return 0;
}
私が得る出力は
バイト0xc0000000float-2.000001e + 00
私は得ることを期待しています
バイト0xdeadbeeffloat-6.2598534e + 18
エンディアンが異なる可能性があると指摘されたように、#1を編集すると、次のようになります。
バイト0xefbeaddefloat-1.1802469e + 29
私が理解していないのは、floatからunsigned intへのキャストで0xc0000000になります(同じprintfステートメントのfloatは-2.0000であり、コンパイラの最適化に起因します)
これは以前は別のコンピューターで機能していました。アーキテクチャの変更である可能性があります。