【问题标题】:How does casting struct work?铸造结构如何工作?
【发布时间】:2012-11-24 04:26:19
【问题描述】:

我现在学习了套接字,我看到有两个结构 Sockaddr 和 sockaddrin。

指南说要在结构中包含 8 个字符的 char 以将一个结构与另一个结构进行比较我不明白它的工作原理,你能解释一下吗?

就像将 int 转换为 char[2]?

它如何与结构一起工作?

谢谢。

【问题讨论】:

  • 你说的是 Beej 的网络编程指南吗?
  • 是的,他没有解释

标签: c casting struct


【解决方案1】:

SOCKADDR 是一个通用结构,它包含一个 ADDRESS_FAMILY 字段,然后在该字段之后包含 14 个字节(char 类型)。根据 sin_family 字段(ADDRESS_FAMILY)的值,后面的 14 个字节会有不同的解释。

当 sin_family 的值等于 AF_INET 时,那么 SOCKADDR 结构就是真正的 SOCKADDR_IN 结构,也就是说这 14 个字节真的应该被解释为:

2 个字节用于 sin_port sin_addr 4 个字节 8 字节未使用但必须存在的填充以使其与 SOCKADDR 结构的大小相同。

因此,如果您有一个指向 SOCKADDR 的指针,并且您检查了 sin_family 字段并且它等于 AF_INET,那么您可以将您的指针转换为指向 SOCKADDR_IN 的指针并以这种方式访问​​这些字段。

【讨论】:

  • 首先谢谢你第二个从顶部开始我的意思是adressfamily的前两个字符被引用到sin_port4等等?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多