将 64 位整数转换回两个 32 位整数

我需要帮助逆转这个转换逻辑:


word0 = np.uint32(3333333333)

word1 = np.uint32(1111111111)


temp64 = np.uint64(word0) * 1000000000

temp64 = temp64 + np.uint64(word1)

temp64现在保存时间戳的值。我需要将其转换回两个 32 位整数并到达word0 = 3333333333和word1 = 1111111111


word0 = np.uint32(3333333333) # 32bit

word1 = np.uint32(1111111111) # 32bit


temp64 = np.uint64(word0) * 1000000000

temp64 = np.uint64(temp64) + np.uint64(word1)


temp32_0 = np.uint64((temp64)/1000000000)

temp32_1 = np.uint64(temp64%1000000000)


print(temp32_0)

print(temp32_1)

输出:


3333333334

111111168

我需要回到


3333333333

1111111111


哈士奇WWW
浏览 440回答 3
3回答

繁星淼淼

尝试使用4294967296而不是1000000000,这会使两个值重叠,从而不可分割。无论选择什么因子,它都必须大于3333333333,而不是小于 。看看使用较小的值33和11使用 factor会发生什么10。33 * 10 + 11 = 341然后提取:341 / 10 = 34341 % 10 = 1

SMILET

还要考虑位移和另一个按位运算:word0 = 3333333333word1 = 1111111111temp64 = (word0 << 32) | word1print(temp64)word00 = temp64 >> 32word11 = temp64 & 0xFFFFFFFFprint(word00, word11)>>14316557653012788679>>3333333333 1111111111

呼如林

首先,看看 line temp64 = np.uint64(word0) * 1000000000。如果您检查 类型temp64,它将是 numpy.float64!因此,您需要先将 1000000000 转换为 uint64。没有 numpy 看起来更好:# overlapping caseword0 = 3333333333word1 = 1111111111factor = 1000000000temp64 = word0 * factortemp64 = temp64 + word1print(divmod(temp64, factor))# non-overlapping caseword0 = 3333333333word1 = 1111111111factor = 10000000000&nbsp; #extra zero addedtemp64 = word0 * factortemp64 = temp64 + word1print(divmod(temp64, factor))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python