我想将整数转换为二进制字符串。我选择使用java允许的原生函数
Integer.toBinaryString(n)
。但不幸的是,这会从我的输出中删除前导零。举例来说,我将输入指定为 18
,它给出的输出为 10010
,但实际输出应该是 010010
。有没有比编写用户定义函数更好/更短的方法将 int 转换为字符串?还是我在这里做错了什么?
int n = scan.nextInt();
System.out.println(Integer.toBinaryString(n));
它应该是010010....
不是真的,整数类型是由 32 位组成的,所以它应该是:
0000000000000000000000000010010,java不会打印该信息,在这种情况下,左零与该数字的大小无关..
因此您需要自己附加前导零,因为该方法返回一个字符串,您可以对其进行格式化:
String.format("%32s", Integer.toBinaryString(18)).replace(' ', '0')
或者在你的情况下使用 6 位
String.format("%6s", Integer.toBinaryString(18)).replace(' ', '0')
来自文档:
该值被转换为二进制(基数 2)的 ASCII 数字字符串,没有额外的前导 0
所以不,你没有做错什么。为了获得所需的输出,您需要自己编写一个小方法。一种方法是准备一个带有所需输出长度的带零的字符串,对其进行子串并附加值。 喜欢
private String getBinaryString6Bit(int n) {
String binaryNoLeadingZero = Integer.toBinaryString(n);
return "000000"
.substring(binaryNoLeadingZero.length())
+ binaryNoLeadingZero;
}
如果您想添加前导零,您可以创建一个新字符串,将零放在前面,然后在末尾添加带有二进制的旧字符串以获得前导零,示例如下所示:
String binaryString = "";
int n = 126;
binaryString = Integer.toBinaryString(n);
String finalBinary = "";
for(int i = binaryString.length(); i < 8; i++) {
finalBinary += 0;
}
finalBinary += binaryString;
System.out.println(finalBinary);
此代码将需要 126 将其转换为二进制,然后添加任何缺少的前导零,在本例中仅为 1 个前导零。