C++11 如何将64个整数拆分为2个32位整数?

C++11 如何将64个整数拆分为2个32位整数?,c++11,C++11,你好!我已经在寻找我问题的解决方案,但我找不到任何解决方案…至少所有建议的解决方案都不适合我…或者我做错了 我有64位整数: {uint64_t st0 = 1470134824450120;} 我只想得到这个号码的最后8位数字,即24450120 我为此做了以下工作: uint32_t timestamp1 = 0; uint32_t timestamp2 = 0; timestamp2 = (uint32_t) st0; timestamp1 = st0 >> 32; pr

你好!我已经在寻找我问题的解决方案,但我找不到任何解决方案…至少所有建议的解决方案都不适合我…或者我做错了

我有64位整数:

{uint64_t st0 = 1470134824450120;}
我只想得到这个号码的最后8位数字,即24450120

我为此做了以下工作:

uint32_t timestamp1 = 0;
uint32_t timestamp2 = 0;

timestamp2 = (uint32_t) st0;
timestamp1 = st0 >> 32;

printf("input:    %" PRIu64 "\n", st0);
printf("unpacked: %" PRIu32 " %" PRIu32 "\n", timestamp2, timestamp1);
因此,我得到:

input:    1470134824450120
unpacked: 1878767688 342292
这里怎么了


请帮帮我…我不是大学的学生,我没有任何顾问来帮我…

你的文章标题要求的不是你在问题中提出的问题。 如果要拆分/剪切特定数量的十进制数字,则不能像使用二进制数字那样进行操作


如果你真的想得到最后8位十进制数字,我建议你把这个64位整数作为字符串放入缓冲区(例如sprintf),然后从缓冲区中去掉最后8位数字,并从中生成一个整数(例如atol)。

你的文章标题要求的不是你在问题中提出的问题。 如果要拆分/剪切特定数量的十进制数字,则不能像使用二进制数字那样进行操作


如果你真的想得到最后8位十进制数字,我建议你把这个64位整数作为字符串放入缓冲区(例如sprintf),然后从缓冲区中剪切最后8位数字,并从中生成一个整数(例如atol)。

所以你有这个数字:14701344450120

其二进制表示为:

0000000000000 1010011100100010100 0110111111111111111110111100001001000

计算后,变量timestamp2 110111111111011110111000010011000中的位为1878767688(十进制),TIMESTAMP100000000000 101001110010000100中的位为342292(十进制)

因此,这些值是正确的


如果您想获取最后8位数字:st0%100000000,那么您有这个号码:1470134824450120

其二进制表示为:

0000000000000 1010011100100010100 0110111111111111111110111100001001000

计算后,变量timestamp2 110111111111011110111000010011000中的位为1878767688(十进制),TIMESTAMP100000000000 101001110010000100中的位为342292(十进制)

因此,这些值是正确的


如果要获取最后8位数字:st0%100000000

我没有尝试编译,但您可以尝试以下操作:)


我没有尝试编译,但您可以尝试以下方法:)


如果要获取最后8位数字:st0%100000000。我不太明白你到底想得到什么。就我个人而言,如果你想得到最后8位的话,我会将uint64\u t转换成两个uint32\u t的数组,然后再继续下去:st0%100000000。我不太明白你到底想得到什么。就我个人而言,我会将uint64\u t投射到两个uint32\u t的数组中,然后从那里继续
#pragma pack(push)  /* push current alignment to stack */
#pragma pack(1)     /* set alignment to 1 byte boundary */
typedef union {
    struct {
        uint32_t a;
        uint32_t b;
    } decoupled;
    uint64_t value;
} MyUnsignedDecoupledInt64;
#pragma pack(pop)   /* restore original alignment from stack */

MyUnsignedDecoupledInt64 getDecoupledUnsignedInt64(uint64_t value)
{
    MyUnsignedDecoupledInt64 ret;
    ret.value = value;
    return ret;
}

int main() {

    MyUnsignedDecoupledInt64 t = getDecoupledUnsignedInt64(1000000000LL);
    printf("%u %u\n", t.decoupled.a, t.decoupled.b);

    return 0;
}