确定转换为字符*的结构的大小
Determine size of struct cast to char*
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++不支持反射,因此没有显式支持的序列化的一般解决方案毫无意义
相关文章:
- 将字符数组转换为时间结构
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- C++具有动态分配的字符数组的结构
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 损坏的结构字符数组 - sqlite C++
- 结构 init:字符**类型的标量初始值设定项两边的大括号
- 如何为结构字段动态分配字符空间
- 如何将字符串字符与结构数组进行比较?
- 如何将可变大小的结构转换为字符数组
- C++ - 使用结构数据类型将单词中的单个小写字符更改为大写,反之亦然
- 在结构数据类型中更改每个字符的 ASCII 值
- C++结构字符数组初始化
- 为什么我不能从结构将数据输入到字符数组中?
- 快速将无符号字符的向量强制转换为POD结构的向量,反之亦然
- 将结构写入二进制文件后,该文件仍然具有正常字符,而不是不可读字符
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 调整结构/字符数组的大小(以减少内存使用)
- 基于 TCP 的结构字符*
- 结构字符数组中的奇怪行为
- 数据结构- c++字符问题