使用 int64 和 int32 指针很难转换

Difficult cast with int64 and int32 pointers

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

您能描述一下 *(int32_t*)&value1 是什么意思吗?是不是表示 "the lowest 32 bits of value1" 所以 *(int32_t*)&value1 = value2; 表示 "the first 32 bits of value1 are replaced with those of value2"?

还是我完全错了?

这将取决于它运行的机器的字节顺序。这是很糟糕的做法。 在大多数 Intel 硬件的小端系统上,最低位字节在前,因此 32 位 SIGNED 值将写入 64 位整数的低 32 位。在大端系统上,它将写入高位。

请注意,int 是有符号的。如果 value2 为负值,则生成的 64 位数字将不是负数(除非它已经是负数)。

它也不会更改 64 位 int 的高位。

我会说...不要那样做?

编辑 更直接地回答你的问题,是的,你是对的,取决于你的意思"first 32 bits"。首先,无论平台使用什么顺序,是的。

&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.