R语言数制互转疑问:十进制转二进制的实现方法是否正确?
你的十进制转二进制方法是正确的
这个自定义函数的逻辑没问题,核心是利用R内置的intToBits()函数获取整数的二进制位,反转后得到符合阅读习惯的二进制顺序。
验证一下:
- 你原二进制字符串是
"1101000011000001",转十进制是53441 - 用
number2binary(53441)得到的向量,去掉前导零后拼接成字符串就是"1101000011000001",和原字符串完全一致,说明转换是准确的。
不过要注意,intToBits()默认返回32位的二进制位(对应R中32位整数的存储规则),所以不指定noBits参数时,结果会带一堆前导零。如果想直接得到和原字符串长度相同的二进制结果,可以指定noBits=16:
number2binary(53441, noBits=16) # 输出:[1] 1 1 0 1 0 0 0 0 1 1 0 0 0 0 0 1
再用paste0拼接就正好是原二进制字符串了。
另外,也可以用更简洁的base包代码实现(不需要自定义函数):
# 直接得到带前导零的32位二进制字符串 paste0(rev(as.numeric(intToBits(53441))), collapse = "") # 截取后面16位得到目标字符串 substr(paste0(rev(as.numeric(intToBits(53441))), collapse = ""), 17, 32)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

