从偏移量开始复制到结构的开头
Copying starting at offset to beginning of structure
所以我有一个这样的结构
编辑:玩家坐标= 1,它是在我的代码开头定义的
struct PLAYERCOORDINATESSTRUCT
{
int type, x, y;
bool isalive;
bool isconnected;
PLAYERCOORDINATESSTRUCT(int customx, int customy, bool customisalive, bool customisconnected)
{
type=(PLAYERCOORDS);
x = customx;
y = customy;
isalive = customisalive;
isconnected = customisconnected;
}
PLAYERCOORDINATESSTRUCT()
{
type=(PLAYERCOORDS);
}
};
char* bufferwithstructdata = new char[sizeof(PLAYERCOORDINATESSTRUCT)-4];
//-4 since it's missing first int
PLAYERCOORDINATESSTRUCT testdata;
memcpy(&testdata,bufferwithstructdata,sizeof(PLAYERCOORDINATESSTRUCT)-4)
我有一个 char 缓冲区,它保存了其中一个结构的所有信息,除了 int 类型(结构的前 4 个字节)
我正在尝试弄清楚如何将其正确内存到具有偏移量的来源。我发现我需要离结构地址 4 个字节才能从 int x 开始。但是,我发现当我尝试通过执行(&testdata+4)将4添加到地址时,它反而在地址中添加了40!任何人都知道我如何对结构进行 4 个字节的偏移,或者我一次只能将地址偏移 4 个字节而不是 10 个字节?
非常感谢您的阅读。
你想要的是以下内容:
memcpy(((char*)&testdata)+4, bufferwithstructdata, sizeof(PLAYERCOORDINATESSTRUCT)-4);
原因是因为应用于指针的 +
运算符将指定的整数乘以所指向事物的大小。这就是为什么在地址中添加 4 会增加 40 的原因。在添加 4 之前转换为字符*将添加 4 个字节的位置。另外,如果你想要一些更便携的东西,以下将是一个很好的技巧来做你想做的事情:
memcpy(((int*)&testdata)+1, bufferwithstructdata, sizeof(PLAYERCOORDINATESSTRUCT)-4);
这样做的好处是向地址添加一个整数大小单位,而不管int
的大小如何。
正如 Lalaland 所指出的,最好像这样使用偏移量:
memcpy(offsetof(PLAYERCOORDINATESSTRUCT, x), bufferwithstructdata, sizeof(PLAYERCOORDINATESSTRUCT)-4);
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 设计将引用元素移动到开头的数据结构.C++
- C++中的数据结构,插入链表中节点的开头
- 什么是结构开头的函数列表指针,称为 c++
- 从偏移量开始复制到结构的开头
- 创建泛型链表,将下一个指针放在结构的开头