gpt4 book ai didi

c - 使 R 在转义终端时使用 C 表示法

转载 作者:太空狗 更新时间:2023-10-29 17:13:42 25 4
gpt4 key购买 nike

不确定我在这里使用的术语是否正确,但我需要 printdeparse 方法使用 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 只是您要写入的同一字节的两种表示形式。

关于c - 使 R 在转义终端时使用 C 表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com