2011-06-17 80 views
2

可能重複:
Converting a four character string to a long字符數組長字符數組

我想再次轉換爲字符數組一個長期而回,但我有點卡住了。

這是到目前爲止我有代碼的一個片段:

char mychararray[4] = {'a', 'b', 'c', 'd'}; 
unsigned long * mylong = (unsigned long *)&mychararray; 
cout << *mylong << endl; 

哪個應該採取的字符數組,並且表示第一個4個字節(一個長的長度),其爲長(I認爲)。

這是正確的嗎?我將如何撤消它以獲取char數組?

感謝您的幫助。

編輯:第三行是一個錯字 - * mychararray應該是* mylong

+0

我不明白你你做了什麼<< * mychararray。 – Dair 2011-06-17 05:25:33

+0

這裏的目標是什麼? – 2011-06-17 05:49:15

回答

2
  1. 你假設sizeof(long) == 4,這可能是錯誤的。 (特別是在64位平臺上)。如果這個假設被破壞了,那麼你處於未定義的行爲區域:操作mylong將會在mychararray的分配內存之外進行讀/寫操作。
  2. 您的第二行有沒有效果,如果你不上第三行使用 *mylong

你可以拿回char*的東西,如:

char *thing = reinterpret_cast<char*>(mylong); 

(你應該使用在第一種情況下,這種類型的演員也比C型演員更明確。)

+0

第三行是一個錯字。 sizeof(long)在我的系統上返回4。 – JonaGik 2011-06-17 05:39:54

+0

@JonaGik:更新 – Mat 2011-06-17 05:47:42

0

是的,它應該在概念上起作用。然而,這樣的演員會對基礎平臺做出假設。如果您使用C++,我會建議您使用C++ typecast

reinterpret_cast是專門爲你的情況。

1

另一件值得注意的事情是如果涉及多臺機器,CPU的永久性。如果他們不同,你最終會得到相反的結果。