我在32位機器上有一個long int的int [2]表示形式,並且想要在64位機器上將其轉換爲long。是否有一個安全的架構獨立的方式來做這種轉換?將int [2]轉換爲long
源機器是32位,int是32位。目標機器是64位,長整型是64位。
我可以做以下嗎?
long i;
int j[2];
#ifdef LITTLEENDIAN
j[1] = *(int*)(&i);
j[0] = *(((int*)(&i))+1)
#else
j[0] = *(int*)(&i);
j[1] = *(((int*)(&i))+1)
#endif
如果以上錯誤,那麼最好和最安全的方法是什麼?我確信之前會問這個問題,但我沒有找到一個乾淨的答案。
由於
這取決於你所說的 「一個'INT [2]''一個長int'的代表權」 的意思。你是如何創建這種表示的? – 2011-04-26 15:34:17
字節順序不是唯一的問題:對於特定機器上的特定編譯器,sizeof(int)可能等於sizeof(long)。在這種情況下,你的代碼應該什麼都不做。 – 2011-04-26 15:36:53
例如在64位Windows上,「long」是32位。 – 2011-04-26 15:38:29