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

将struct转换为数组?

发布时间:2020-12-16 05:00:52 所属栏目:百科 来源:网络整理
导读:我目前正在学习C,我无法理解以下代码: struct dns_header{ unsigned char ra : 1; unsigned char z : 1; unsigned char ad : 1; unsigned char cd : 1; unsigned char rcode : 4; unsigned short q_count : 16;};int main(void){ struct dns_header *ptr; u
我目前正在学习C,我无法理解以下代码:
struct dns_header
{
    unsigned char ra : 1;
    unsigned char z : 1;
    unsigned char ad : 1;
    unsigned char cd : 1;
    unsigned char rcode : 4;
    unsigned short q_count : 16;

};

int main(void)
{
    struct dns_header *ptr;
    unsigned char buffer[256];

    ptr = (struct dns_header *) &buffer;

    ptr->ra = 0;
    ptr->z = 0;
    ptr->ad = 0;
    ptr->cd = 0;
    ptr->rcode = 0;
    ptr->q_count = htons(1);

}

我不明白的是ptr =(struct dns_header *)& buffer;

任何人都可以详细解释这个吗?

解决方法

您的缓冲区只是一个连续的原始字节数组.从缓冲的角度来看,它们没有语义:你不能做像buffer-> ra = 1这样的事情.

但是,从struct dns_header *的角度来看,这些字节将变得有意义.你在用ptr =(struct dns_header *)& buffer做什么将指针映射到数据.

ptr现在将指向数据数组的开头.这意味着当你写一个值(ptr-> ra = 0)时,你实际上是在修改缓冲区中的字节0.

您正在转换缓冲区数组的struct dns_header指针的视图.

(编辑:李大同)

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

    推荐文章
      热点阅读