C++11 如何将64个整数拆分为2个32位整数?
你好!我已经在寻找我问题的解决方案,但我找不到任何解决方案…至少所有建议的解决方案都不适合我…或者我做错了 我有64位整数: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
{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;
}