如何使用二进制和八进制文字?

因此,当我开始使用二进制、八进制和十六进制的数字时,我假设在描述这些文字时使用标准前缀,即0b…对于二进制表示法,0o...对于八进制和0x...对于十六进制.但事实上,我发现我只能使用像0xFFF这样的十六进制文字,而其他使用会引发错误,如"ERROR:"0b1010"中的意外符号"或"0o123"中的ERROR:意外符号.

那么,有没有可能以同样的方式使用二进制或八进制文字呢?或者,是否有其他标准机制可以继续使用所有这些基础,而不是使用任何函数,如strtoi()或as.INTEGER(),或Sprint(),或其他第三方程序包?

所有版本的语言和IDE都是最新的.

推荐答案

换算为基数10

您在问题中提到了基本函数strtoi().您可以使用它来表示十六进制、八进制和十进制字符串,但不能表示二进制:从docs:

Select 基数的标准C规则是,八进制常量(前缀0后面不跟xX)和十六进制常量(前缀0x0X)被解释为基数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为八进制,xX为十六进制(使用与代码相同的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?

R相关问答推荐

在Julia中调用R函数

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

如何使用ggplot重新绘制LASO回归图?

以R中的正确顺序将日期时间字符列转换为posixct

大规模重新标记haven标签数据

次级y轴R gggplot2

筛选出以特定顺序患病的个体

如何在一次运行中使用count进行多列计数

一小时满足条件的日期的 Select

在R中使用Scale_y_Break后更改y轴标签

从外部文件读取多个值作为字符向量

根据列A中的差异变异列,其中行由列B中的相对值标识

在ggplot2的框图中绘制所有级别的系数

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

如何使这些react 表对象相互独立?

如何计算每12行的平均数?

多元正态分布的计算

R/shiny APP:如何充分利用窗口?

为什么R列名称忽略具有指定名称的向量,而只关注索引?

如何在GGPlot中控制多个图例和线型