加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

struct members使用循环赋值

发布时间:2020-12-16 09:48:18 所属栏目:百科 来源:网络整理
导读:我有这样的结构 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; ui
我有这样的结构

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在下面的评论提出了不这样做的理由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读