使用int64和int32指针进行难度转换

时间:2016-08-03 23:52:43

标签: pointers casting int memory-address

我有*(int32_t*)&value1 = value2;。然后我有*(int32_t*)&value1

您能描述*(int32_t*)&value1 = value2;的含义吗?它是否意味着" value1"的最低32位所以{{1}}表示" value1的前32位被替换为value2"?

或者我完全错了?

1 个答案:

答案 0 :(得分:1)

这将取决于它运行的机器的字节顺序。这是非常糟糕的做法。 在大多数英特尔硬件的小端系统上,最低位字节是第一个,因此32位SIGNED值将写入64位整数的低32位。在大端系统上,它将被写入高位。

请注意,int已签名。如果value2是负值,则得到的64位数不会为负数(除非它已经是负数)。

它也不会改变64位int的高阶位。

我说...不要这样做?

EDIT 为了更直接地回答你的问题,是的,你是对的,取决于你的意思是"前32位"。首先,无论平台使用什么顺序,是的。

&value1 -> will give the address of value1
(int32_t*)&value1 -> tells the compiler to treat the address of value1 as a pointer to an int32_t
*(int32_t*)&value1 -> then dereference the pointer, so assigning to this will put the assigned value into the address of value1 as if it were an int32_t.