我需要通过JRI将原始数据传递回Java,但它不支持原始数据,只支持其他各种矢量类型(例如整数)。如何将原始(字节向量)转换为整数向量?
我尝试将数据作为字符串向量传回,但由于JRI没有正确解码字符串(例如'\ x89'被丢弃为“”),因此会中断。
如果效率更高(未装箱)也会很好。 as.integer
不起作用 - 它不返回数组中字符的字节值,更不用说rawToChar为nuls生成“”。
答案 0 :(得分:4)
更进一步,您可以直接从原始向量读取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
答案 1 :(得分:2)
请参阅rawToChar
的文档:
rawToChar将原始字节转换为单个字符串或a 单字节的字符向量(“0表示”。
当然,一旦你设法将它转到character
,你可以通过as.integer
方法轻松将其转换为整数,但是cautious。
答案 2 :(得分:2)
这个问题很老了,但对于那些(像我一样)在寻找答案时遇到这个问题的人: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)