我有一个浮点变量,它需要作为 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/

10-11 23:03
查看更多