R等价于numpy'frombuffer'

时间:2014-07-15 16:00:34

标签: python r numpy binary-data

要在Python中解码来自套接字连接的二进制答案,我会这样做:

import numpy as np

answer= b"\x80\x8eaS\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x80\x8eaS\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"

datatype = [('da_0', '<i8'), ('i8_1', '<i8')]

np.frombuffer(answer, datatype)

输出

>>>array([(1398902400, 1), (1398902400, 1)], 
  dtype=[('da_0', '<i8'), ('i8_1', '<i8')])

我一直在使用R中的unpack()函数(来自{pack})来重现相同的结果但直到现在都没有成功。

任何想法都会非常感激!

1 个答案:

答案 0 :(得分:1)

在R中,您可以在连接上使用readBin,或在原始向量上使用

answer=as.raw(c(
0x80,0x8e,0x61,0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x8e,0x61,0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00))


readBin(answer[1:16],"integer", size=8,n=2, endian="little")
# [1] 1398902400          1 
readBin(answer[17:32],"integer", size=8, n=2, endian="little")
# [1] 1398902400          1

如果您的响应位于连接对象中,那么您不必担心索引以提取原始向量的正确部分。您可以从二进制连接中读取它,它将跟踪索引。