Декодировать гекс в R со значениями NUL - PullRequest
0 голосов
/ 09 апреля 2020

Очевидно, что R не допускает нулевых символов:

c("abc\0d")
Error: nul character not allowed (line 1)

Я пытаюсь декодировать шестнадцатеричную строку и записать результаты в файл. NUL ценит для меня решающее значение. Сейчас я написал так много:

# Example of hex string
msg <- '504F03032C0000000803F8'
hex <- sapply(seq(1, nchar(as.character(msg)), by=2), 
              function(x) substr(msg, x, x+1))

# trying to decode hex
x <- NULL
for( i in 1:length(hex)){
  x[i] <- as.character(ifelse(hex[i] == "00", as.raw(0), rawToChar(as.raw(strtoi(hex[i], 16L)))))
}

write(paste0(x, collapse = ""), "test1")`

Как я могу изменить as.raw(0) часть, чтобы в файле я видел значение NUL, а не 00? Можно ли вообще сделать это в R? Может быть, мне стоит перейти на другую программу, например python?

1 Ответ

1 голос
/ 09 апреля 2020

Я не понимаю, почему вы хотите преобразовать эти значения в символ. Почему бы не сохранить их в виде числовых c значений и использовать writeBin для их записи? R имеет хорошую поддержку для этого. Например,

# Example of hex string
msg <- '504F03032C0000000803F8'

# Use solution from https://stackoverflow.com/a/2247574/2554330 to split
hex <- substring(msg, seq(1, nchar(msg), 2), seq(2, nchar(msg), 2))

# trying to decode hex
x <- strtoi(hex, 16)  # Converts to integer vector
writeBin(x, "test1", size=1)
...