r - 如何将十六进制字符串视为R中的原始数据
问题描述
我已经将一些数据作为 blob 存储在 SQL Server 中。如果我对数据库进行直接查询,blob 列将作为原始数据(十六进制)返回,然后我可以使用这些原始数据将 blob 作为文件写入终端系统。
library(jsonlite)
library(DBI)
con <- dbConnect(odbc::odbc(), Driver = "SQL Server", Server = "localhost\\sql2019",
Database = "DocumentData", Trusted_Connection = "True")
blobs <- dbGetQuery(con,"select * from Blob")
str(blobs$spectra[2][[1]]) #this returns raw [1:1678544] ff d8 ff e0 ...
但是,如果我通过 web 服务执行相同的查询,十六进制数据将作为字符串返回。在这两种情况下,十六进制数字是相同的。这是示例代码:
data<-jsonlite::fromJSON("https://localhost:5001/Spectra")
str(data$spectraBLOB) #this returns chr "FFD8FFE0"| __truncated__
所以我的问题是如何将字符数组(十六进制数字)转换为原始向量,以便我可以使用十六进制原始数据在终端系统上重新创建文件。将原始数据向量保存到终端系统文件的示例代码是:
rawToJpeg <- function(pic_data) {
f = file(paste0('c:/temp/blob_file.jpg'), "wb")
writeBin(object = pic_data, con = f)
close(f)
}
rawToJpeg(blobs$spectra[2][[1]])#works with raw data
rawToJpeg(data$spectraBLOB) #does not work as expected with string of hexadecimal
任何想法我该如何解决它(或将十六进制字符串的类型更改为十六进制原始)?
解决方案
将十六进制字符串解析为原始向量的代码:
sst <- strsplit(data$spectraBLOB, "")[[1]]
hex_string_vector <- paste0(sst[c(TRUE, FALSE)], sst[c(FALSE, TRUE)])
raw_hex_vector = as.raw(as.hexmode(hex_string_vector))
推荐阅读
- python - 使用 boto3 在 s3 中搜索存储桶
- javascript - 将 vanilla javascript 更改为 React 时的 CSS 问题
- javascript - 音乐播放器播放列表逻辑
- javascript - 在 javascript window.open 中打印由 post 调用创建的 PDF 文件
- reactjs - 找不到功能实现React js
- typescript - 如何从键而不是值推断类型参数?
- android - Android用意图填充谷歌日历附件字段
- python - 如何使用值更新 many2many 列表 [ODOO 12]
- android - 取货地点预测列表
- python - 当我使用 input() 要求用户输入时,为什么会出现 NameError?