如果我們有一個POD結構說A,我這樣做:的reinterpret_cast爲「序列化」的數據,字節順序和對齊在接收端
char* ptr = reinterpret_cast<char*>(A);
char buf[20];
for (int i =0;i<20; ++i)
buf[i] = ptr[i];
network_send(buf,..);
如果recieving結束遙控盒,不一定是相同的硬件或操作系統,可我放心地這樣做是爲了「反序列化」:
void onRecieve(..char* buf,..) {
A* result = reinterpret_cast<A*>(buf); // given same bytes in same order from the sending end
將「結果」永遠是有效的? C++標準規定了POD結構,reinterpret_cast的結果應該指向第一個成員,但這是否意味着實際的字節順序也是正確的,即使接收端是不同的平臺?
沒有,也不會永遠是有效的。考慮一個平臺是大端的,另一個是小端的情況。 [網絡字節順序](http://en.wikipedia.org/wiki/Endianness#Endianness_in_networking)出現這個問題... – Cameron 2012-01-30 06:01:21
填充也可以不同平臺 – bdonlan 2012-01-30 06:32:20