gpt4 book ai didi

将结构转换为数组?

转载 作者:太空狗 更新时间:2023-10-29 17:20:32 26 4
gpt4 key购买 nike

我目前正在学习 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 只是一个连续的原始字节数组。从 buffer 的角度来看,它们没有语义:你不能做类似 buffer->ra = 1 的事情。

但是,从 struct dns_header * 的角度来看,这些字节将变得有意义。您使用 ptr = (struct dns_header *) &buffer; 所做的是将您的指针映射到您的数据。

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

您正在转换 buffer 数组的 struct dns_header 指针的 View 。

关于将结构转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com