在 R 中,我尝试将二进制数据转换为整数值,但不是将 1 个值存储在 1 个字节中,而是将多个值存储在字节内和字节之间。
我知道 64 位(8 字节)存储了 12 个整数值。这 12 个整数的位数如下:5,6,5,5,4,7,5,6,5,5,4,7 添加以下代码后:
time <- readBin(fid,integer(),size=1,n=8,signed='FALSE')
返回结果为:
[1] 25 156 113 63 214 158 113 63
正确的数据应该是:
25 32 19 17 11 31 22 54 19 17 11 31
我尝试过使用 bitAnd 和 bitShiftL (包 bitops),但没有取得真正的成功。非常感谢您的帮助。
最佳答案
请注意,每个 4 字节整数的操作都是相同的(该模式重复两次)。因此,解决 4 字节整数的问题就足够了,并循环遍历文件中的 4 字节整数(通过 readBin 检索)。这比逐字节考虑问题要简单得多。
# length(x) should be 1
bitint <- function(x, bitlens) {
result <- integer(length(bitlens))
for (i in seq_along(bitlens)) {
result[i] <- bitwAnd(x, (2^bitlens[i])-1)
x <- bitwShiftR(x, bitlens[i])
}
return(result)
}
bitlens <- c(5,6,5,5,4,7)
x <- c(1064410137L, 1064410838L)
c(sapply(x, function(i) bitint(i, bitlens)))
## [1] 25 32 19 17 11 31 22 54 19 17 11 31
关于从 R 中的二进制 <8 位读取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101150/