我有这样的结构

struct hour_parameters{
    uint8_t VALUE_00;
    uint8_t VALUE_01;
    uint8_t VALUE_02;
    uint8_t VALUE_03;
    uint8_t VALUE_04;
    uint8_t VALUE_05;
    uint8_t VALUE_06;
    uint8_t VALUE_07;
    uint8_t VALUE_08;
    uint8_t VALUE_09;
    uint8_t VALUE_10;
    uint8_t VALUE_11;
    uint8_t VALUE_12;
    uint8_t VALUE_13;
    uint8_t VALUE_14;
    uint8_t VALUE_15;
    uint8_t VALUE_16;
    uint8_t VALUE_17;
    uint8_t VALUE_18;
    uint8_t VALUE_19;
    uint8_t VALUE_20;
    uint8_t VALUE_21;
    uint8_t VALUE_22;
    uint8_t VALUE_23;
};

struct hour_parameters hparam;

我想分配一个uint8_t x[24]hparam,如何使用for循环来完成,这个
hparam.value00 = x[0];
hparam.value01 = x[1];
and so on?

最佳答案

你真的应该在结构中使用数组,但是…

#include <string.h>
memcpy(&hparam, x, sizeof(hparam));

(我正躲在桌子下面)
这很危险的原因之一是结构中可能有填充。现在,
因为它们都是字节,所以你很安全。但是,严格地说,这种
是不合法的。你可以先做一件事
assert(sizeof(hparam) == sizeof(x));

如果您坚持使用for循环:
for(int i = 0; i != sizeof(hparam); i++) {
    ((uint8_t *)&hparam)[i] = x[i];
}

这是丑陋的,也不太洁。Kerrek在下面的评论提出了不这样做的理由。

09-04 16:14