2016-05-18 76 views
-4

我得到了一个19位数字(64位和总是19位数字),并且必须将其转换为2 32位整数。64位数字到2x 32位

2 32位必须能够转换回19位数字。

有没有人有想法?

回答

1

您可以通过转移做到这一点:

#include "stdio.h" 

uint64_t bigNum = 5678216589648569852; 
uint64_t merged = 0; 

uint32_t partA = 0; 
uint32_t partB = 0; 

//split 
partA |= bigNum; 
partB |= bigNum >> 32; 

//merge 
merged = partB; 
merged <<= 32; 
merged |= partA; 
+0

右移一个符号整数是实现定义的行为。 – owacoder

+0

我认为这里没什么大不了的。也许如果在拆分和合并之间使用32位的。如果没有使用32位整数的内容,则应该无关紧要。我*猜测*分裂只是发送一些只支持32位的协议的int。 –

+0

使用带符号整数还有另一个问题。如果'partA'或'partB'最终为负数,会影响'a64'或'b64'中的较高位,这会给出错误的结果。作为一般规则,总是使用'unsigned'整数进行按位运算。 – owacoder