通信人家园

标题: C语言如何遍历结构体成员  [查看完整版帖子] [打印本页]

时间:  2014-5-19 17:15
作者: longyuchen     标题: C语言如何遍历结构体成员

已知一个结构体的指针,结构体内部的成员比较复杂,有int,char,union,struct等各种类型,现欲将其所有成员都打印出来,该如何处理?求编程牛人指点?
时间:  2014-5-19 18:14
作者: plasterlux

从首地址,地址按成员类型长度向后偏移,挨个按类型取数据打印。
时间:  2014-5-19 18:53
作者: longyuchen

plasterlux 发表于 2014-5-19 18:14
从首地址,地址按成员类型长度向后偏移,挨个按类型取数据打印。

假如我不知道成员及其类型,可以读吗?
时间:  2014-5-19 19:03
作者: plasterlux

必须知道成员的类型(及长度),才能按类型寻址和取数打印。
否则建议打印一串二进制数据,对二进制数据进行人工分析识别各个成员

很多协议抓包什么的,就是抓的一串二进制数据。识别靠专门工具(就是通过各个字段长度/含义进行识别);如果没有工具,靠人工,那就要记住协议里的细节,通常能做到这个都被称为牛人。
时间:  2014-5-19 22:12
作者: longyuchen

plasterlux 发表于 2014-5-19 19:03
必须知道成员的类型(及长度),才能按类型寻址和取数打印。
否则建议打印一串二进制数据,对二进制数据进 ...

做的就是协议。。。
时间:  2014-5-20 08:50
作者: plasterlux

呵呵,那就是可以知道结构成员类型/长度喽。

要么做个牛人,让人景仰;
要么做个工具,让人人都成为牛人
时间:  2014-5-20 09:48
作者: longyuchen

plasterlux 发表于 2014-5-20 08:50
呵呵,那就是可以知道结构成员类型/长度喽。

要么做个牛人,让人景仰;

主要是要解析的协议较多,产生的结构体也很多,如果按照类型一个一个的读取的话,感觉既费时又费力,因此想要需求一个快捷有效的方法快速输出协议的各个字段,并且可以方便的运用的不同的结构体上,具有通用性!不知这样能否实现?
时间:  2014-5-20 16:46
作者: plasterlux

所谓的解析,就是要知道类型和长度。

这里,一把钥匙开一把锁,没有万能钥匙的
时间:  2014-5-22 11:24
作者: yinhexitaiyang

专业户
时间:  2014-5-24 18:29
作者: sentout

将收到的结构体保存到一段内存上,把内存首地址强转成结构指针,用这个指针可以直接遍历结构内的变量了,动手写个测试程序看看,如果网络传输还要注意下大小端(字节序)问题,
时间:  2014-5-24 19:01
作者: longyuchen

sentout 发表于 2014-5-24 18:29
将收到的结构体保存到一段内存上,把内存首地址强转成结构指针,用这个指针可以直接遍历结构内的变量了,动 ...

你指的是写程序时编辑器窗口会自动提示结构体变量吗?
时间:  2014-5-24 20:46
作者: sentout

longyuchen 发表于 2014-5-24 19:01
你指的是写程序时编辑器窗口会自动提示结构体变量吗?

你不是做协议吗?用结构体肯定是所谓的二进制协议啊,挨个字段解析肯定麻烦些,用结构指针要方便些,不过还是要具体情况具体分析了...




通信人家园 (https://www.txrjy.com/) Powered by C114