如何使用C或C ++访问64位整数的下半部分?我可以在汇编中轻松完成,但我不知道如何在C / C ++中完成它
编辑:访问上半部分怎么样?答案 0 :(得分:9)
long long BigOne = 0x1234567890ABCDEFLL;
long long LowerHalf = BigOne & 0xFFFFFFFFLL;
long long UpperHalf = (BigOne >> 32) & 0xFFFFFFFFLL;
很抱歉,如果十六进制文字需要一些前缀/后缀,我对C不是很熟悉。如果你知道,请修正答案。
答案 1 :(得分:-3)
之前我曾用过各种技巧。使用工会,长班等等。
现在我只使用memcopy。这可能听起来效率低下,但上次我检查编译器优化代码时非常好:
int32_t higher32 (unsigned long long arg)
{
unsigned char * data = (unsigned char *) arg;
int32_t result;
memcpy (&result, data+4, sizeof (int32_t));
return result;
}
int32_t lower32 (unsigned long long arg)
{
unsigned char * data = (unsigned char *) arg;
int32_t result;
memcpy (&result, data+0, sizeof (int32_t));
return result;
}