2010-04-11 77 views
4

我有一個結構:轉換字符指針(字符*)爲結構

//Custom packet structure. 
struct UserPacket 
{ 
__int64 pingTime; 
} CustomPacket; 

我已經想通了如何將它轉換爲char *。現在我想將char *轉換回結構。有什麼建議麼?

+1

你如何將其轉換回完全取決於你是怎麼做到的正向轉換。請發佈轉發轉化的詳細信息。 – 2010-04-11 11:35:08

+0

看起來像是在嘗試序列化數據。在這裏要非常小心填充和對齊問題(儘管你的單個成員的例子應該沒​​問題)。你是否將char *寫入文件或其他一些流程中?可能還有其他問題需要考慮,如排序。 – philsquared 2010-04-11 12:25:24

+0

如果數據在不同計算機之間傳遞(看起來像),請小心字節順序。 – Potatoswatter 2010-04-11 13:06:26

回答

5

指定它。這裏有一些例子(兩個使用類型轉換)。

CustomPacket customPacket; 

char *   p = (char *) &customPacket; 

CustomPacket * pPacket = (CustomPacket *) p; 
CustomPacket * pAlternate = &customPacket; 

希望這會有所幫助。

+0

非常感謝。這兩個工作。我感謝您的幫助。 – InfinateOne 2010-04-11 11:43:53

+2

您應該避免使用C++進行C風格的轉換,因爲編譯器會嘗試每個轉換,直到找到「可以」的轉換爲止。像@Zoltan一樣使用它,因爲那樣你就可以清楚地看到作者正在做什麼以及他腦子裏有什麼。 – jaor 2014-07-30 05:36:02

+0

@jaor - 迷人!我之前對C++並不瞭解。我每天都在學習新的東西。 :) – Sparky 2014-07-30 20:19:29

8

如果是C++:

char* theCharPtr; // has your converted data 

UserPacket* fromChar = reinterpret_cast<UserPacket*>(theCharPtr); 
+0

非常感謝。這兩個工作。我感謝您的幫助。 – InfinateOne 2010-04-11 11:43:30

+1

由於該線程是一個突出的搜索結果,因此應該注意,從[[un] signed] char *'轉換爲'SomethingElse *'不是由標準正式生效。嚴格的別名規則只允許'SomethingElse *'爲'char *'。當然,大多數實現方式都允許這種做法符合大多數人的期望 - 有時我會利用這一點 - 但它總是應該突出警告它並不是保證行爲。特別是可以想象,在某些實現中,生成的'SomethingElse'包含一個基本類型的成員,現在這個成員沒有對齊,從而導致程序在運行時崩潰 – 2016-01-06 12:16:09