如何使用R从二进制文件中读取64位二进制补码整数?

时间:2015-01-20 04:23:09

标签: r double bit-manipulation long-integer

我收集到表示R中的64位整数我需要使用double。这很好,但我需要从二进制文件中读取这样一个整数,它存储为Big Endian 64位二进制补码(java长)。

我当然可以读取4字节块中的两个有符号整数,如此

a = readBin(file, integer(), size=4, endian="big")
b = readBin(file, integer(), size=4, endian="big")

但是如何将它们组合在R中以获得我需要的双倍?

1 个答案:

答案 0 :(得分:1)

以两个整数而不是双整数来读它肯定更好。小幅度负数的2位补码64位表示(例如-1)是NaN的双精度值,对它们进行算术可能无法按照您的需要进行算法。

首先考虑2的补充问题。我将假设a是更重要的一半。如果是负数,请注意事实并取整数的2的补码。翻转所有位,然后从b添加到a添加中添加一个带。

接下来,将a转换为double,乘以2 ^ 32,然后添加b

如果原始值为负,则否定结果。

请注意,如果原始数字太大,您可能无法得到确切的答案。