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

922 0
Honkers 2025-3-21 21:28:51 | 显示全部楼层 |阅读模式

[流畅的 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_

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行