簡體   English   中英

您可以使用memcpy反序列化字節嗎?

[英]Can you deserialize bytes with memcpy?

如果我有一個帶有基元的類,例如一堆int或chars,是否可以使用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將具有不同的值。 這安全嗎?

這安全嗎?

在不同的程序或平台之間, memcpy不安全的 您不能保證類型的字節布局是一致的。

在同一平台上的同一程序中, 僅當 is_trivially_copyable_v<T>true 才能使用memcpy序列化格式良好的*類型T

std::atomic是一種利用某些可按字節復制的類型的類型。


*如果已定義或默認的構造函數,賦值運算符或析構函數中沒有錯誤,則類型T被視為“格式正確”。

簡而言之,沒有。 memcpy()並非為此設計的。 話雖如此,如果您不關心數據和可執行文件的跨平台問題,就可以擺脫它。

只要一致地存儲和檢索數據, memcpy()就不會在乎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM