我想将整数转换为二进制字符串。我选择使用java允许Integer.toBinaryString(n)
的本机函数。但不幸的是,这会从我的输出中减少前导零。让我们举例说,我将输入作为18
给出,它给出了10010
的输出,但实际输出应该是010010
。将int转换为字符串是否比编写用户定义的函数更好/更短?或者我在这里做错了什么?
int n = scan.nextInt();
System.out.println(Integer.toBinaryString(n));
答案 0 :(得分:6)
假设 010010 ....
不是真的,整数类型由32位组成,所以它应该:
000000000000000000000000010010 ,java不会打印该信息,在这种情况下左边的零与该数字的大小无关。
因此您需要自己附加前导零,因为该方法返回的字符串可以格式化:
String.format("%32s", Integer.toBinaryString(18)).replace(' ', '0')
或在您的情况下使用6位
String.format("%6s", Integer.toBinaryString(18)).replace(' ', '0')
答案 1 :(得分:0)
来自文档:
此值转换为二进制(基数2)中的ASCII数字字符串,没有额外的前导0
所以不,你没有做错事。要获得所需的输出,您需要自己编写一个小方法。一种方法是使用所需输出的长度准备一个带零的字符串,将其子串并附加值。 像
private String getBinaryString6Bit(int n) {
String binaryNoLeadingZero = Integer.toBinaryString(n);
return "000000"
.substring(binaryNoLeadingZero.length())
+ binaryNoLeadingZero;
}