LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 891|回复: 3

强制类型转化问题

[复制链接]
发表于 2006-2-23 09:41:37 | 显示全部楼层 |阅读模式
tcp/ip卷二102页中
有个leread 函数

  1. leread(unit,buf,len)
  2. int unit;
  3. char *buf;
  4. int len;
  5. {
  6.      .......
  7.      struct ether_header *et;
  8.      .......
  9.     et=(struct ether_header *) buf;
复制代码


不明白 buf 怎么转et的
哪位高手就此讲解一下 
又如 经常有 struct sockaddr *  与 struct sockaddr_in * 之间的强制转化
原理到底是什么呢
发表于 2006-2-23 10:29:53 | 显示全部楼层
buf只是一块连续的内存区域,用一个结构指针指向它,说明了这段连续内存的数据分布结构。并不会改变什么,但这样就可以用结构的.或->运算符来偏移内存。
struct sockaddr 和struct sockaddr_in可以相互转换是因为它们内部结构是一样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-23 11:43:19 | 显示全部楼层
谢谢了
能否告诉一下这方面的资料
我先好好看看 最近看了一下精华版的网络编程
发现 这方面的只是还是用的挺多的
回复 支持 反对

使用道具 举报

发表于 2006-2-23 16:28:19 | 显示全部楼层
实际上,struct sockaddr是个通用结构,其实只是占个位置,而struct sockaddr_in是ipv4的地址结构,两者大小相同
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表