如何将“raw”转换为R中的整数向量?

如何将“raw”转换为R中的整数向量?,r,R,我需要通过JRI将raw传递回Java,但它不支持raw,只支持其他各种向量类型(如整数)。如何将原始(字节向量)转换为整数向量 我尝试将数据作为字符串向量传回,但由于JRI没有正确解码字符串(例如“\x89”被丢弃为“”),因此出现了中断 如果效率更高(不打包),那也不错as.integer不起作用-它不返回数组中字符的字节值,更不用说rawToChar为nuls生成“”的事实了。请参阅rawToChar的文档: rawToChar将原始字节转换为单个字符串或 单个字节的字符向量(其中“”表示

我需要通过JRI将raw传递回Java,但它不支持raw,只支持其他各种向量类型(如整数)。如何将原始(字节向量)转换为整数向量

我尝试将数据作为字符串向量传回,但由于JRI没有正确解码字符串(例如“\x89”被丢弃为“”),因此出现了中断


如果效率更高(不打包),那也不错
as.integer
不起作用-它不返回数组中字符的字节值,更不用说rawToChar为nuls生成“”的事实了。

请参阅
rawToChar
的文档:

rawToChar将原始字节转换为单个字符串或 单个字节的字符向量(其中“”表示0)


当然,一旦您成功地将其转换为
字符
,您就可以通过
as.integer
方法轻松地将其转换为整数。

这个问题非常古老,但对于那些(像我一样)在搜索答案时遇到这个问题的人来说:as.integer(raw.vec)工作得很好

f <- file("/tmp/a.out", "rb")
seek(f, 0, "end")
f.size <- seek(f, NA, "start")
seek(f, 0, "start")
raw.vec <- readBin(f, 'raw', f.size, 1, signed=FALSE)
close(f)
bytes <- as.integer(raw.vec)

f更进一步,您可以直接从原始向量读取bin。因此,我们可以:

> raw
[1] 2b 97 53 eb 86 b9 4a c6 6c ca 40 80 06 94 bc 08 3a fb bc f4
> readBin(raw, what='integer', n=length(raw)/4)
[1]  -346843349  -968181370 -2143237524   146576390  -188941510  

我应该提到,我目前正在将数据作为字符串向量传递回去(其中每个字符串只包含0或1个字符)-我正在寻找更有效的方法(取消绑定)
as.integer
不起作用-它不返回数组中字符的字节值,更不用说rawToChar为NUL生成“”了。