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 *(或任何其他指针类型),编译器也没有说什么.虽然你以后会遇到问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |