如何解决将R中的大字符串转换为十六进制
我需要将1M布尔值的大字符串转换为十六进制。我找不到正确的库或语法。我以为在将布尔值转换为char之后,我可以使用gsub,但是我不能将其保留在原始数据类型中。每个FALSE必须为0x0,而TRUE必须为0x8。所以,这个:
FALSEFALSEFALSETRUEFALSEFALSE
成为此原始数据:
000800
这是我一直在玩的一小段代码:
final mymodel = Provider.of<MyModel>(context,listen:false) //default for listen is `true`
但是有些事情变得很明显...首先,我以为我巧妙地使用了字符和as.raw,一次只使用了两个布尔值,但是gsub不尊重输入的对,所以我得到了很多类似的东西:
“ 8088TRUE00TRUE000000880800888088TRUE”
我已经看到了一些关于bin2hex的引用,但是我在CRAN中找不到它,而且我不确定它是否能满足我的要求。
解决方法
如果我正确理解了该问题,则您有一个字符串,其中TRUE和FALSE串联在一起。您可以直接使用gsub
将其替换为数字。然后,您可以将各个数字分开以得到一个向量,而不是一个长字符串,然后可以在最终的向量上应用所需的转换。
smp <- paste0(sample(x=c("TRUE","FALSE"),size=100,replace=T),collapse="")
smp_as_numbers <- gsub("FALSE","0",gsub("TRUE","8",smp,fixed=TRUE),fixed = TRUE)
smp_as_vector <- strsplit(smp_as_numbers,"")[[1]]
as.raw(as.integer(smp_as_vector))
> as.raw(as.integer(smp_as_vector))
# [1] 08 00 00 00 00 08 00 08 08 08 08 08 08 00 08 08 00 08 00 00 00 00 00 08 00 08 08 08
# [29] 08 00 00 08 00 00 00 08 00 00 08 08 00 00 00 00 08 08 08 08 08 08 00 08 00 08 08 00
# [57] 00 08 08 00 08 00 08 08 08 00 08 08 08 08 00 08 08 00 00 00 08 00 08 08 08 00 08 08
# [85] 08 00 08 00 00 08 08 00 00 08 08 00 00 08 00 00
> smp
#[1] #"TRUEFALSEFALSEFALSEFALSETRUEFALSETRUETRUETRUETRUETRUETRUEFALSETRUETRUEFALSETRUEFALSEFALSEFALSEFALSEFALSETRUEFALSETRUETRUETRUETRUEFALSEFALSETRUEFALSEFALSEFALSETRUEFALSEFALSETRUETRUEFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUEFALSETRUEFALSETRUETRUEFALSEFALSETRUETRUEFALSETRUEFALSETRUETRUETRUEFALSETRUETRUETRUETRUEFALSETRUETRUEFALSEFALSEFALSETRUEFALSETRUETRUETRUEFALSETRUETRUETRUEFALSETRUEFALSEFALSETRUETRUEFALSEFALSETRUETRUEFALSEFALSETRUEFALSEFALSE"
如果要使用BMS::hex2bin()
,则必须直接使用非分割字符:
smp <- paste0(sample(x=c("TRUE",size=5,fixed = TRUE)
smp_as_numbers
# [1] "08888"
BMS::hex2bin(smp_as_numbers)
# [1] 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
typeof(BMS::hex2bin(smp_as_numbers))
# [1] "double"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。