我在 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 版本中无效。
问题可能出在哪里,我该如何解决?
谢谢!