R语言 在原始转换中从十六进制缓冲区向后移动一个位置

kpbwa7wx  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(107)

我一直在尝试从数据库的blob列中提取一个表,该列在提取过程中被转换为十六进制字符串。我的所有工作都使用R。BLOB数据列的捕获如下所示:DATA column is a hex string coming from a BLOB column in a database
问题是,当以原始形式检查时,数据向前移动了一个位置,当我进行最终转换时,完全修改了对数字数组的转换。下面突出显示了该问题的捕获:The first chunk is the right data, the second chunk is the data shifted one position ahead
我的问题是,如何将数据向后移动一个位置?
在R或Python中有没有任何包能够做这样的转换?
我一直在尝试使用wkb包中的hex2raw函数,但没有成功。Python中的decode函数也是如此。

i1icjdpr

i1icjdpr1#

在R中,您可以用数字"移位"数据

data <- as.raw(sample(256,10) - 1)
data2 <- as.raw((as.integer(data) * 16L) %% 256L + ( c(data[-1], 0L) %/% 16L)  )

data
#>  [1] 89 af 4f 94 66 e8 84 c1 93 01
data2
#>  [1] 9a f4 f9 46 6e 88 4c 19 30 10

编辑

其他方式:

data3 <- as.raw(
  as.integer(rawShift(data, 4)) + 
  as.integer(rawShift(c(data[-1],as.raw(0)), -4)))

相关问题