从 R 中的二进制 <8 位读取整数

标签 r binary-data

在 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/

相关文章:

r - 为什么会出现此错误消息?

r - 在 `dplyr` 动词 : `select` and `arrange` working differently 中使用不带引号的字符串

sql-server - SQL 中的二元运算符 OR?

swift - 使用 Swift 5+ 将数据写入 OutputStream

file - 在 CSV 文件中传输二进制数据(图像等)

r - 加载插入符号包时出现错误 : Package "ggplot2" could not be found,

r - 使用 shinyapps.io 检测语言环境时出错

r - 使用 R 构建特定的时间序列图

haskell - 使用Data.Binary.decodeFile,遇到错误 "demandInput: not enough bytes"

haskell - 通过网络进行高效的二进制 I/O