如何在两个有符号整数中存储无符号64位值并恢复它们?

Pal*_*han 2 c bit-manipulation bitwise-operators

如果我有一个uint64_t original和两个常规的四字节整数(有符号),我想将值存储在两个整数中,然后恢复无符号的64字节.这应该是可能的,因为在这两种情况下我们都有64位可用.我正在思考以下问题:

uint64_t test = 1350640807215539000;
int a = test >> 32; //get top 32 bits
int b = test & 0x00000000FFFFFFFF; //keep bottom 32 bits

uint64_t recover_test = ((a << 32) & b);
Run Code Online (Sandbox Code Playgroud)

但这并没有让我回到测试的原始价值......我做错了什么?

Pau*_*l R 8

你可以使用一个联合,而不是做很多容易出错的错误.

union
{
    uint64_t u64;
    int32_t s32[2];
} u;

u.u64 = 1350640807215539000ULL;

printf("a = %d\n", u.s32[0]);
printf("b = %d\n", u.s32[1]);
Run Code Online (Sandbox Code Playgroud)