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

c – 将char *转换为struct

发布时间:2020-12-16 10:07:03 所属栏目:百科 来源:网络整理
导读:在代码 here中,有一行: struct iphdr * iph = (struct iphdr *)buffer; 在ProcessPacket函数中,缓冲区的类型为char *.缓冲区已通过主函数中的recvfrom赋值.如何将简单字符串(缓冲区)转换为结构以及如何安全地提取数据? iphdr: struct iphdr { #if defined
在代码 here中,有一行:

struct iphdr * iph = (struct iphdr *)buffer;

在ProcessPacket函数中,缓冲区的类型为char *.缓冲区已通过主函数中的recvfrom赋值.如何将简单字符串(缓冲区)转换为结构以及如何安全地提取数据?

iphdr:

struct iphdr {
    #if defined(__LITTLE_ENDIAN_BITFIELD)
        __u8    ihl:4,version:4;
    #elif defined (__BIG_ENDIAN_BITFIELD)
        __u8    version:4,ihl:4;
    #else
        #error  "Please fix <asm/byteorder.h>"
    #endif
         __u8   tos;
         __u16  tot_len;
         __u16  id;
         __u16  frag_off;
         __u8   ttl;
         __u8   protocol;
         __u16  check;
         __u32  saddr;
         __u32  daddr;
         /*The options start here. */
};

解决方法

要理解的第一件事是内存上的位保持完全相同,而不管转换(struct iphdr *).只是你现在说缓冲区现在被视为指向struct iphdr而不是之前的指针.您只是告诉编译器使用不同的眼镜看比特,因此进行相应的解释.编译器突然发现缓冲区已成为结构iphdr *.并说“好”就是这样.重要的是你确切知道什么是缓冲区并将其转换为正确的类型.

如果你愿意,你可以将类型转换缓冲区转换为int *(或任何其他指针类型),编译器也没有说什么.虽然你以后会遇到问题.

(编辑:李大同)

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

    推荐文章
      热点阅读