我不确定我在这里使用正确的术语,但是当从常规字符集中转出字节时,我需要print或者deparse使用C表示法(例如"\x05"代替"\005").
x <- "This is a \x05 symbol"
print(x)
[1] "This is a \005 symbol"
是否有本地方法来实现这一目标?
我需要这个来生成BSON:http://bsonspec.org/#/specification.所有示例都明确使用\x05符号.
侵入内部print似乎是个坏主意。相反,我认为您应该自己进行字符串转义,并最终用于cat打印字符串而无需任何额外的转义。
您可以使用encodeString进行初始转义、gregexpr识别八\0..进制转义、strtoi将表示八进制数字的字符串转换为这些数字、sprintf以十六进制打印数字以及regenmatches对匹配部分进行操作。整个过程看起来像这样:
inputString <- "This is a \005 symbol. \x13 is \\x13."
x <- encodeString(inputString)
m <- gregexpr("\\\\[0-3][0-7][0-7]", x)
charcodes <- strtoi(substring(regmatches(x, m)[[1]], 2, 4), 8)
regmatches(x, m) <- list(sprintf("\\x%02x", charcodes))
cat(x, "\n")
请注意,此方法会将八进制转义符(如 )转换\005为十六进制转义符(如 )\x05,但其他转义序列(如\t或 )\a不会受此影响。您可能还需要更多代码来处理这些问题,但上面应该包含您需要的所有成分。
请注意,您引用的 BSON 规范几乎肯定意味着原始字节,因此只要您的字符串包含代码为 5 的字符(您可以在"\x05"输入中写入该字符),并且以二进制模式将该字符串写入所需的输出,它R 如何向您打印该字符串根本不重要。毕竟,八进制\005和十六进制\x05只是您要写入的同一字节的两种表示形式。
| 归档时间: | 
 | 
| 查看次数: | 267 次 | 
| 最近记录: |