将原始存储为字符写入文件

Ben*_*min 6 r

我被一些我认为应该相对简单的事情难住了。

我有一个表示二进制字符串的字符串。例如:

x <- as.character(charToRaw("Hello World"))
Run Code Online (Sandbox Code Playgroud)

我想写入x文件,但无法反转创建过程x以获取原始内容。我原以为这会很简单

writeBin(as.raw(x), 
         con = "filename.txt")
Run Code Online (Sandbox Code Playgroud)

但这不会生成带有文本“Hello World”的文件。也没有

writeBin(x,
         con = "filename.txt")
Run Code Online (Sandbox Code Playgroud)

当我尝试直接逆时,出现错误

> x <- as.character(charToRaw("Hello World"))
> x
[1] "48" "65" "6c" "6c" "6f" "20" "57" "6f" "72" "6c" "64"

> rawToChar(as.raw(x))
Error in rawToChar(as.raw(x)) : 
  embedded nul in string: '0A\0\0\0\0249\0H\0@'
In addition: Warning messages:
1: In rawToChar(as.raw(x)) : NAs introduced by coercion
2: In rawToChar(as.raw(x)) :
  out-of-range values treated as 0 in coercion to raw
Run Code Online (Sandbox Code Playgroud)

语境

我知道这是解决问题的一种奇怪的方法。我受到一些奇怪的限制,我将已填充订单的数据作为 JSON 字符串保存到 SQL 数据库。用户可以在请求中包含附件,因此我将原始向量转换为字符串以存储在 JSON 字符串中。我在将字符串重构为原始向量时遇到问题,该原始向量可以制作为原始文件的副本。

Jos*_*ien 6

这将为您提供逆运算:

x <- as.character(charToRaw("Hello World"))
rawToChar(as.raw(as.hexmode(x)))
## [1] "Hello World"
Run Code Online (Sandbox Code Playgroud)