[流畅的 C] C语言将结构体转化为字符串
本文并非标题的具体实现。而是提供一种编程方式,习惯,一种探讨。
本文有一点点门槛,有 socket,开源协议栈学习/开发经验者阅读更佳。
Overview
[*流畅的 C*] C语言将结构体转化为字符串
思路
struct (packet) to string “抽象实现”
如何使用
全文亮点
Reference
思路
直接使用 memcpy 之类的是不会得到你期望的。
所以最好的做法就是定义结构体的时候就实现对字符串的转换。
就像 Python 的 __str__ 一样。
(不好意思,博主雷打不动转python!信仰上帝Python)
如果不懂 python 也没有关系,我在下面会说明 C 语言的方法。
假设你有一个 packet:
struct protocol_packet { /* 假设 open source 已经帮你把字节码翻译成 ACSII / HEX 完成*/
unsigned char Mac[16];
unsigned char IPv4Addr[64];
};
然后你你在一个 open source 代码中,有个函数,传递了接受过来的packet:
int
I_am_open_source_handler(struct protocol_packet *recv_packet){
// ...do things...
return 0;
}
struct (packet) to string “抽象实现”
这个时候你想把 packet 打印出来看看里面有什么。
我们可以这么做:
免责声明,因为个人时间有限,没有对以下纯手打抽象出来的代码实验,
但是思路不会错,所以具体细节还需要看官自己微调一下。
struct protocol_packet { /* 假设 open source 已经帮你把字节码翻译成 ACSII / HEX 完成*/
unsigned char Mac[16];
unsigned char IPv4Addr[64];
int (*packet2str)(char*, struct protocol_packet*);
int (*spacket2str)(char*, struct protocol_packet*, size_t);
};
int protocol_packet2str(char dstStr[], struct protocol_packet *recv_