从二进制文件读取无符号整数64位
问题描述:
我很努力将数据从二进制文件导入R. 其中,数据文件包含一个64位无符号整数值(little Endian)我需要读出。从二进制文件读取无符号整数64位
该值代表自1900年1月1日中午12:00之后的秒数,并将被转换为日期和时间值(例如YYMMDDhhmmss)。
作为初学者,我已经阅读了一些软件包(bit64,int64),但似乎他们不支持无符号整数或不再维护。
有人可以帮我吗?
答
使用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位和签名。除非你有一些未来的出路,否则这不应该成为一个问题。
谢谢,这些例子对我来说工作得非常好。 作为时区,我使用tz =“Etc/GMT + 1”而不是“GMT + 1”,它在我的Windows计算机上发出警告 – Frank