我有一个浮点变量,它需要作为 uint8_t 传递给函数。
如何转换回浮点原始值。
代码:
bool SetAnalog(uint8_t number, float voltage, MessagePriority priority, Callback clbck)
{
uint8_t args[2];
args[0] = number;
memcpy(&(args[1]),&voltage,sizeof(float));
PTCLoopOutMessage* message = parent()->GetLoopOutMessage(this,
this->address(),
_OutputVoltage,
"DACVoltage",
args,
sizeof(args),
Device,
priority);
message->SetCallback(clbck);
return ProcessOutMessage(message);
}
我尝试从 uint8_t 数组中取回浮点原始值并需要分配给 probe[channel]
uint8_t channel = message->GetOutMessage()->GetData()->data[0];
unsigned char* value = &message->GetOutMessage()->GetData()->data[1];
memcpy(&__output.output.probe[channel].dac, value, sizeof(float));
我总是得到值(value)为 0,
请帮忙
最佳答案
像这样尝试:
struct MyArgs {
uint8_t channel;
float voltage;
} *args = new MyArgs();
args->channel = number;
args->voltage = voltage;
然后像这样传递它:
....GetLoopOutMessage(....., (uint8_t *)args, sizeof(*args), ....)
并像这样读取数据:
struct MyArgs {
uint8_t channel;
float voltage;
} *args = (struct MyArgs *)message->GetOutMessage()->GetData()->data;
uint8_t channel = args->channel;
__output.output.probe[channel].dac = args->voltage;
delete args;
请注意,我在这里使用了
new
/delete
,而不是本地堆栈存储,因为您似乎在回调中使用数据,所以我猜您的数据已被覆盖(碰巧为零)在您开始之前阅读。如果
new
/delete
不合适(GetLoopOutMessage
复制数据),那么这样做:struct {
uint8_t channel;
float voltage;
} args = {number, voltage};
然后像这样传递它:
....GetLoopOutMessage(....., (uint8_t *)&args, sizeof(args), ....)
并像这样读取数据:
struct mydata {
uint8_t channel;
float voltage;
} *args = (struct mydata *)message->GetOutMessage()->GetData()->data;
uint8_t channel = args->channel;
__output.output.probe[channel].dac = args->voltage;
关于c++ - 将数据 float 到 uint8_t 和 memcpy ,返回 null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18614451/