Java 中整数到 BinaryString 删除前导零

问题描述 投票:0回答:3

我想将整数转换为二进制字符串。我选择使用java允许的原生函数

Integer.toBinaryString(n)
。但不幸的是,这会从我的输出中删除前导零。举例来说,我将输入指定为
18
,它给出的输出为
10010
,但实际输出应该是
010010
。有没有比编写用户定义函数更好/更短的方法将 int 转换为字符串?还是我在这里做错了什么?

int n = scan.nextInt();
System.out.println(Integer.toBinaryString(n));
java binary
3个回答
8
投票

它应该是010010....

不是真的,整数类型是由 32 位组成的,所以它应该是:

0000000000000000000000000010010,java不会打印该信息,在这种情况下,左零与该数字的大小无关..

因此您需要自己附加前导零,因为该方法返回一个字符串,您可以对其进行格式化:

String.format("%32s", Integer.toBinaryString(18)).replace(' ', '0')

或者在你的情况下使用 6 位

String.format("%6s", Integer.toBinaryString(18)).replace(' ', '0')

0
投票

来自文档:

该值被转换为二进制(基数 2)的 ASCII 数字字符串,没有额外的前导 0

所以不,你没有做错什么。为了获得所需的输出,您需要自己编写一个小方法。一种方法是准备一个带有所需输出长度的带零的字符串,对其进行子串并附加值。 喜欢

private String getBinaryString6Bit(int n) {
    String binaryNoLeadingZero = Integer.toBinaryString(n);
    return "000000"
            .substring(binaryNoLeadingZero.length())
            + binaryNoLeadingZero;
}

0
投票

如果您想添加前导零,您可以创建一个新字符串,将零放在前面,然后在末尾添加带有二进制的旧字符串以获得前导零,示例如下所示:

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 个前导零。

© www.soinside.com 2019 - 2024. All rights reserved.