确定转换为字符*的结构的大小

Determine size of struct cast to char*

本文关键字:结构 字符 转换      更新时间:2023-10-16
Packets::LoginData data;
data.username = "frostraver";
data.password = "test";
auto buffer = reinterpret_cast<char*>(&data);

我有上面的代码。我需要能够计算缓冲区(这是一个指针(中数据的大小。我知道我不能只做一个strlen或类似的事情。

获得此大小的最佳方法是什么?我可以只取填充结构的大小吗?

不,这是不可能的。 buffer类型为 Packets::LoginData* 只是一个指针变量,没有任何大小信息。即使您要确定结构的大小,也可能不完整,因为一个或多个字段可能反过来是导致无效/不正确/不完整结果的指针。

下图总结了答案

                         Packets::LoginData
                         ____________________
                        |                    |        __________________ 
                        | username (char *)--|------>|_|_|_|_|_|_|..._|_| (username)
                        |                    |        __________________
buffer----------------->| password (char *)--|------>|_|_|_|_|_|_|..._|_| (password )
                        |                    |
                        | ..............     |
                        |____________________|

最重要的是,C++不支持反射,因此没有显式支持的序列化的一般解决方案毫无意义