0

我在 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 版本中无效。

问题可能出在哪里,我该如何解决?

谢谢!

4

0 回答 0