Как обрабатывать шестнадцатеричную строку как необработанные данные в R - PullRequest
1 голос
/ 07 августа 2020

Я сохранил некоторые данные на SQL сервере в виде большого двоичного объекта. Если я делаю прямой запрос к базе данных, столбцы больших двоичных объектов возвращаются как необработанные данные (шестнадцатеричные), которые я затем могу использовать для записи большого двоичного объекта в виде файлов в конечной системе.

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 ...

Но если я выполню тот же запрос через веб-службу, шестнадцатеричные данные возвращаются в виде строки. Шестнадцатеричные цифры в обоих случаях одинаковы. Вот пример кода:

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

Есть идеи, как go решить эту проблему (или изменить тип шестнадцатеричной строки на шестнадцатеричную исходную)?

1 Ответ

0 голосов
/ 09 августа 2020

Код для разбора шестнадцатеричной строки как вектора для r aws:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...