Почему float правильно читается в 32-битной, но не в 64-битной версии Visual Studio C ++ 2015

У меня есть приложение в Visual Studio 2015, которое получает определенную структуру, как указатель памяти, с некоторыми полями из приложения в LabWindows CVI, которое записывает в сокет. Затем я преобразовываю память в ту же структуру в моем приложении. Код выглядит так:

DT_ULLong data;
wait_msg(...,...,&data);
XC_GEN_MSG* gen_msg = (XC_GEN_MSG*)data;
float var = gen_msg->varFloat;
//var has trash values
...

структуры:

typedef struct _XC_GEN_MSG
{
XC_SERVER_MSG_HEADER   Header;
DT_ULong               data; //unsigned long long int
} XC_GEN_MSG;typedef struct
{
unsigned char word[8];
unsigned int num_image;
unsigned int num_pixels_az;
unsigned int num_pixels_dist;
unsigned int rawtime_ms;
unsigned int rawtime_time_t;
unsigned int PW;
unsigned int PRI;
unsigned int Range;
unsigned int PW_Digit;
unsigned int Integrated_pulses_AZ;
unsigned int Rotation_time;
unsigned int bytes_per_pixel;
unsigned int bytes_digit;
DT_UEncoder  UD_AZ_RESOLUTION; // typedef unsigned short DT_UEncoder;
float                       f_az_resolution;
unsigned int Status_bitfield;
float                      Lat;
float                      Long;
float                      wind_speed;
float                      wind_direction;
float                      speed;
float                      course;
unsigned int comand;
unsigned int valor_comand;
} XC_SERVER_MSG_HEADER;

Все поля правильно отлиты, и я вижу правильные значения, но поля с плавающей запятой (в данном случае varFloat) всегда с мусором (обычно близко к 0, но иногда, например, 2 * e24).
Я предполагаю, что это может быть связано с проблемами компиляции или копированием памяти, но интересная часть заключается в том, что он работает в 32-версии приложения, а не в 64-версии.

Где может быть проблема и как я могу ее решить?

Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector