c语言将结构体转换为字符串,[流畅的 C]C语言将结构体转化为字符串

本文介绍了如何在C语言中将结构体转换为字符串,通过定义结构体时加入转换函数指针,类似Python的__str__方法。文中提供了一种思路,涉及memcpy、snprintf等函数的使用,强调了在处理结构体成员如MAC地址时的注意事项,并给出了如何在代码中正确使用这些转换函数的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[流畅的 C] C语言将结构体转化为字符串

本文并非标题的具体实现。而是提供一种编程方式,习惯,一种探讨。

本文有一点点门槛,有 socket,开源协议栈学习/开发经验者阅读更佳。

Overview

[*流畅的 C*] C语言将结构体转化为字符串

思路

struct (packet) to string “抽象实现”

如何使用

全文亮点

Reference

a6c6504acadc79deec3c780782e7e5e1.png

思路

直接使用 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_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值