我有一个 Int64 值,但我只需要低 32 位。因此,我想要一种从 Int64 值的低 32 位获取 Int32 值的快速方法。
谢谢
如果您将 int64 值分配给 int32 值,编译器将自动为您执行此操作
(如Steven Sudit所述):
int64 val64 = ...;
int32 val32 = ...;
...
val32 = val64; // get the low 32 bits
// or
val32 = (val64 >> 32); // get the high 32 bits
并且因为编译器可能会显示警告,您可以指定强制转换
val32 = (int32)val64;
做这样的事情:
long tempLong = ((yourLong >> 32) << 32); //shift it right then left 32 bits, which zeroes the lower half of the long
int yourInt = (int)(yourLong - tempLong);
这可能不是最紧凑的方法,但对我来说似乎是最易读的。以下代码将提取 long 的高半部分:
long tempLong = (int)(yourLong >> 32);
您没有指定语言,但在许多情况下,您只需将其转换为 Int32。最高位将被丢弃。
您可以让编译器处理字节序,并隐藏所有位移、指针操作等。
DWORD CUtility::ConvertUint64toUint32(unsigned __int64 in64){
ULARGE_INTEGER uli;
uli.QuadPart = in64;
return uli.LowPart;
}
在 C/C++ 中(我认为)最好的方法是使用联合。例如,以下函数使用匿名联合从 64 位整数中提取低 32 位。
uint32_t lower_32_bits(uint64_t value) {
union { uint64_t value; struct { uint32_t high, low; }; } converter;
converter.value = value;
return converter.low;
}
这种联合技巧可用于各种事情,例如将浮点值的位转换为具有相同位长的整数,例如用于执行按位运算和其他 hack。