换算为基数10
您在问题中提到了基本函数strtoi()
.您可以使用它来表示十六进制、八进制和十进制字符串,但不能表示二进制:从docs:
Select 基数的标准C规则是,八进制常量(前缀0
后面不跟x
或X
)和十六进制常量(前缀0x
或0X
)被解释为基数8和16;所有其他字符串都被解释为基数10.
x <- c(
"255", # 255 in base 10
"0xFF", # 255 in hex
"0377" # 255 in octal
)
strtoi(x)
# [1] 255 255 255
我不知道为什么这里面没有包括"0b"
个前缀字符串.您仍然可以提供不带前缀的二进制字符串,只要您将base指定为参数:
strtoi("11111111", base = 2)
# [1] 255
从基数10换算
你提到了sprintf()
,它同样可以用于十六进制和八进制,但不能用于二进制.从docs人开始:
d, i, o, x, X
:整数值,o
为八进制,x
和X
为十六进制(使用与代码相同的a-f大小写).
# cat() is so we get real new lines rather than "\n"
cat(sprintf(
paste(
"Base ten: %d",
"Hex: %x",
"Octal: %o",
sep = "\n"
),
x, x, x
))
# Base ten: 255
# Hex: ff
# Octal: 377
对于二进制,您可以使用intToBits()
.但是,这将返回一个具有许多尾随零的大端原始向量,例如:
intToBits(255)
# [1] 01 01 01 01 01 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
这可能不是你想要的.有关将其转换为更合适格式的各种方法,请参阅Converting decimal to binary in R?