我有一条大邮件,必须初始化为默认值。消息是一个包含许多子结构,枚举等的结构。我有一个自动生成的消息描述文件,其中包含消息的逐字段解析:字段起始字节,起始位,长度,类型,默认值。 我已经实现了一种机制,将消息视为位缓冲区并根据描述文件对其进行初始化。但是......我的浮点默认值有问题。 如何按位设置浮点变量的自动化?
谢谢!
答案 0 :(得分:0)
好吧,我自己设法解决了这个问题。 假设如下:
MSG_STRUCT_TYPE OutputMsg; // e.g.750 bytes
int startByte = 28; // the start byte of floating point field in the message
float defVal = -1.75f; // the default value for the field above
现在,使用 reinterpret_cast ,我们可以进行以下操作:
unsigned char* bytes_to_set = reinterpret_cast<unsigned char*>(&defVal);
unsigned char* msgBuff = reinterpret_cast<unsigned char*>(&OutputMsg);
*reinterpret_cast<float*>(&msgBuf[startByte]) = *reinterpret_cast<float*>(bytes_to_set);
完成这项工作。
在实施并检查 njuffa 的评论之后,我将其添加为另一个(更简单,更清晰)的答案:
unsigned char* msgBuff = reinterpret_cast<unsigned char*>(&OutputMsg);
memcpy(&msgBuf[startByte], &defVal, sizeof(float);