У меня есть этот бит кода, который выводит неправильные результаты.
#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;
}
вывод, который я получаю
байт 0xc0000000 с плавающей запятой -2.000001e + 00
Я ожидаю получить
байт 0xdeadbeef float -6.2598534e + 18
edit # 1
как было указано, порядок байтов может быть другим, что приведет к следующему
байт 0xefbeadde float -1.1802469e + 29
что я не понимаю, так это приведение от float к unsigned int, результатом которого является 0xc0000000 (float в том же операторе printf равен -2.0000, я бы отнес к оптимизации компилятора)
раньше это работало на другом компьютере. Это может быть изменение архитектуры.