的載體在我的C++應用程序,我有這樣的結構轉換一個結構的字節
typedef struct
{
int a;
int b;
char *c
}MyStruct
,我有這樣的實例:
MyStruct s;
我也有這樣的定義:
vector<byte> buffer;
我想插入\將「s」結構轉換成緩衝區向量。
什麼是最好的方式來做到這一點在c + +?
感謝
的載體在我的C++應用程序,我有這樣的結構轉換一個結構的字節
typedef struct
{
int a;
int b;
char *c
}MyStruct
,我有這樣的實例:
MyStruct s;
我也有這樣的定義:
vector<byte> buffer;
我想插入\將「s」結構轉換成緩衝區向量。
什麼是最好的方式來做到這一點在c + +?
感謝
,最好的辦法是使用range copy constructor和低層次的投檢索指針結構的內存:
auto ptr = reinterpret_cast<byte*>(&s);
auto buffer = vector<byte>{ptr, ptr + sizeof(s)};
爲了走另一條路,你可以投字節緩衝區爲目標類型(但它需要是相同類型,否則你違反strict aliasing):
auto p_obj = reinterpret_cast<obj_t*>(&buffer[0]);
但是,對於索引≠0(我猜在技術上也適用於索引= 0,但這似乎不太合理),請注意不匹配memory alignment。因此,更安全的方法是首先將緩衝區複製到properly aligned storage,並從那裏訪問指針。
很好的答案。我有一個不同的問題:我需要做「其他的方式」:我有一個向量
@GuyAvraham查看更新。 –
'vector buffer(sizeof(s)); memcpy(&buffer [0]&s,sizeof(s));' –
你想要做序列化嗎?你關心排序嗎?填充?對準? –
和你想用你的'char * c'做什麼?你應該複製它的內容嗎?順便說一句,你的代碼看起來不像C++ –