gpt4 book ai didi

c++ - 你能用 memcpy 反序列化字节吗?

转载 作者:行者123 更新时间:2023-11-30 01:37:16 28 4
gpt4 key购买 nike

如果我有一个包含原语的类,例如一堆 int 或 char,是否可以使用 memcpy 对其进行反序列化和序列化?

MyClass toSerialize;
unsigned char byteDump[sizeof(toSerialize)];
memcpy(&byteDump, &toSerialize, sizeof(toSerialize));
WriteToFile(byteDump);

然后在另一个程序或计算机上执行此操作:

MyClass toDeserialize;
unsigned char byteDump[sizeof(toSerialize)];
LoadFile(byteDump);
memcpy(&toDeserialize, &byteDump, sizeof(byteDump));

我遇到过这在同一个程序中确实有效的情况。但是如果我尝试在其他程序或 PC 上运行它,它有时会不起作用并且 MyClass 将具有不同的值。这样做安全吗?

最佳答案

Is this safe to do or not?

在不同程序或平台之间,memcpy 不安全。您不能保证类型的字节布局是一致的。

在同一平台上的同一程序中,一个格式正确的*类型 T可以序列化为 memcpy 仅当 is_trivially_copyable_v<T>true .

std::atomic是一种利用某些类型可按字节复制的类型。


*A型T如果定义的或默认的构造函数、赋值运算符或析构函数中没有错误,则被认为是“格式良好”。

关于c++ - 你能用 memcpy 反序列化字节吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990057/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com