我有这样的结构
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在下面的评论提出了不这样做的理由。