2015-11-05 101 views
3

我很努力將數據從二進制文件導入R. 其中,數據文件包含一個64位無符號整數值(little Endian)我需要讀出。從二進制文件讀取無符號整數64位

該值代表自1900年1月1日中午12:00之後的秒數,並將被轉換爲日期和時間值(例如YYMMDDhhmmss)。

作爲初學者,我已經閱讀了一些軟件包(bit64,int64),但似乎他們不支持無符號整數或不再維護。

有人可以幫我嗎?

回答

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位和簽名。除非你有一些未來的出路,否則這不應該成爲一個問題。

+0

謝謝,這些例子對我來說工作得非常好。 作爲時區,我使用tz =「Etc/GMT + 1」而不是「GMT + 1」,它在我的Windows計算機上發出警告 – Frank

相關問題