我在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