从二进制文件

时间:2015-11-05 15:08:34

标签: r

我正在努力将数据从二进制文件导入R. 其中,数据文件包含一个 64位无符号整数值(小端),我需要读出来。

该值表示自1900年1月1日凌晨00:00起的秒数,并将转换为日期和时间值(例如YYMMDDhhmmss)。

作为初学者,我已经阅读了一些软件包(bit64,int64),但似乎它们不支持无符号整数或者不再维护。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:4)

使用readBin将文件读入raw向量,然后手动转换。

# sample data
zz <- file("myBinaryFile", "wb")
writeBin(32L, zz, size=8L, endian="little")
close(zz)

# now read the data
zz <- file("myBinaryFile", "rb")
# n can be a mild over-estimate
rawvec <- readBin(zz, raw(), n=10, endian="little")
close(zz)
# convert the value to a number
nsec <- sum(2^.subset(0:63, as.logical(rawToBits(rawvec))))
# convert the number to POSIXct
as.POSIXct(nsec, tz="UTC", origin=as.POSIXct("1900-01-01", tz="UTC"))

请注意,nsec将是一个数值/双精度值,因为R的整数是32位且已签名。这应该不是问题,除非你有一些日期时间在将来的出路。