从二进制文件读取无符号整数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位和签名。除非你有一些未来的出路,否则这不应该成为一个问题。

+0

谢谢,这些例子对我来说工作得非常好。 作为时区,我使用tz =“Etc/GMT + 1”而不是“GMT + 1”,它在我的Windows计算机上发出警告 – Frank