【发布时间】:2011-04-26 15:32:19
【问题描述】:
我在 32 位机器上有一个 long int 的 int[2] 表示,并希望在 64 位机器上将它转换为 long。是否有一种安全的架构独立方式来进行这种转换?
源机器是 32 位的,一个 int 是 32 位的。目的机器是64位,long long类型肯定是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
如果以上不正确,那么最好和最安全的方法是什么?我敢肯定这之前会被问到,但我没有找到一个明确的答案。
谢谢
【问题讨论】:
-
这取决于你所说的“
long int的int[2]表示”是什么意思。您是如何创建这种表示的? -
字节序不是唯一的问题:对于特定机器上的特定编译器,sizeof(int) 可能等于 sizeof(long)。在这种情况下,您的代码应该什么都不做。
-
例如在 64 位 Windows 上,
long是 32 位。 -
@Steve:对于任何类型的 T,sizeof(T) 取决于编译器,而不是操作系统,因此说“64 位 Windows”是不准确的。您必须说“Windows 7 64 位下的 Microsoft Visual C++ 编译器版本 X.Y”。
-
@Kiran:但是现在您要求针对特定于平台的问题提供独立于平台的解决方案!一般来说,如果你想要独立于平台的数据类型,你应该使用
<stdint.h>中的int32_t和int64_t。
标签: c++ int long-integer