例如,对于1, 2, 128, 256
,输出可以是(16位):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
我试过
String.format("%16s", Integer.toBinaryString(1));
它为左边填充添加空格:
` 1'
如何将0
用于填充。我在Formatter找不到它。还有其他办法吗?
P.S。 this post描述了如何使用左0填充格式化整数,但它不适用于二进制表示。
答案 0 :(得分:170)
我认为这是一个次优的解决方案,但你可以做到
String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')
答案 1 :(得分:18)
java.util.Formatter中没有内置二进制转换,我建议你使用String.replace用零替换空格字符,如:
String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0")
或者实现你自己的逻辑,将整数转换为二进制表示,并在this中给出的行的某处添加左边距。 或者,如果您确实需要将数字传递给格式化,您可以将二进制表示转换为BigInteger,然后使用前导零格式化,但这在运行时非常昂贵,如:
String.format("%016d", new BigInteger(Integer.toBinaryString(1)))
答案 2 :(得分:11)
您可以使用Apache Commons StringUtils。它提供了填充字符串的方法:
StringUtils.leftPad(Integer.toBinaryString(1), 16, '0');
答案 3 :(得分:8)
我正在尝试各种各样的方法调用,这些方法调用之前我还没有真正用过,他们的工作取得了一定的成功,直到我想到了一些非常简单的东西,它可能会起作用,而且确实如此!
我确定之前已经考虑过,不确定它对于长串二进制代码是否有用,但它适用于16Bit字符串。希望能帮助到你!! (注意第二段代码得到改进)
String binString = Integer.toBinaryString(256);
while (binString.length() < 16) { //pad with 16 0's
binString = "0" + binString;
}
感谢Will帮助改进这个答案,使其无需循环。 这可能有点笨拙但它有效,如果可以的话,请改进并评论....
binString = Integer.toBinaryString(256);
int length = 16 - binString.length();
char[] padArray = new char[length];
Arrays.fill(padArray, '0');
String padString = new String(padArray);
binString = padString + binString;
答案 4 :(得分:6)
这是旧帖子的新答案。
要将带前导零的二进制值填充到特定长度,请尝试以下操作:
Integer.toBinaryString( (1 << len) | val ).substring( 1 )
如果len = 4
和val = 1
,
Integer.toBinaryString( (1 << len) | val )
返回字符串"10001"
,然后返回
"10001".substring( 1 )
丢弃第一个字符。所以我们得到了我们想要的东西:
"0001"
如果val
可能是否定的,请尝试:
Integer.toBinaryString( (1 << len) | (val & ((1 << len) - 1)) ).substring( 1 )
答案 5 :(得分:3)
尝试...
String.format("%016d\n", Integer.parseInt(Integer.toBinaryString(256)));
我不认为这是做到这一点的“正确”方式......但它有效:)
答案 6 :(得分:3)
更简单的user3608934版本&#34;这是一个老技巧,创建一个16 0&#s;然后附加你修剪过的二进制字符串&#34;:
private String toBinaryString32(int i) {
String binaryWithOutLeading0 = Integer.toBinaryString(i);
return "00000000000000000000000000000000"
.substring(binaryWithOutLeading0.length())
+ binaryWithOutLeading0;
}
答案 7 :(得分:3)
我不知道“正确”的解决方案,但我建议你快速补丁。
String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0");
我刚尝试过,看到它运作正常。
答案 8 :(得分:1)
有效的天真解决方案
String temp = Integer.toBinaryString(5);
while (temp.length() < Integer.SIZE) temp = "0"+temp; //pad leading zeros
temp = temp.substring(Integer.SIZE - Short.SIZE); //remove excess
另一种方法是
String temp = Integer.toBinaryString((m | 0x80000000));
temp = temp.substring(Integer.SIZE - Short.SIZE);
这将生成整数5的16位字符串
答案 9 :(得分:1)
从Java 11开始,您可以使用repeat(...)方法:
"0".repeat(Integer.numberOfLeadingZeros(i) - 16) + Integer.toBinaryString(i)
或者,如果您需要32位表示形式的任何整数:
"0".repeat(Integer.numberOfLeadingZeros(i != 0 ? i : 1)) + Integer.toBinaryString(i)
答案 10 :(得分:0)
这是一个老技巧,创建一个16 0的字符串,然后附加从String.format(“%s”,Integer.toBinaryString(1))获得的修剪二进制字符串,并使用最右边的16个字符,lopping关闭任何领先的0。更好的是,创建一个函数,让您指定所需的二进制字符串的长度。当然,有很多其他方法可以实现这一目标,包括图书馆,但我正在添加这篇帖子以帮助一位朋友:)
public class BinaryPrinter {
public static void main(String[] args) {
System.out.format("%d in binary is %s\n", 1, binaryString(1, 4));
System.out.format("%d in binary is %s\n", 128, binaryString(128, 8));
System.out.format("%d in binary is %s\n", 256, binaryString(256, 16));
}
public static String binaryString( final int number, final int binaryDigits ) {
final String pattern = String.format( "%%0%dd", binaryDigits );
final String padding = String.format( pattern, 0 );
final String response = String.format( "%s%s", padding, Integer.toBinaryString(number) );
System.out.format( "\npattern = '%s'\npadding = '%s'\nresponse = '%s'\n\n", pattern, padding, response );
return response.substring( response.length() - binaryDigits );
}
}
答案 11 :(得分:0)
我会用下面的方法编写我自己的util类
public class NumberFormatUtils {
public static String longToBinString(long val) {
char[] buffer = new char[64];
Arrays.fill(buffer, '0');
for (int i = 0; i < 64; ++i) {
long mask = 1L << i;
if ((val & mask) == mask) {
buffer[63 - i] = '1';
}
}
return new String(buffer);
}
public static void main(String... args) {
long value = 0b0000000000000000000000000000000000000000000000000000000000000101L;
System.out.println(value);
System.out.println(Long.toBinaryString(value));
System.out.println(NumberFormatUtils.longToBinString(value));
}
}
输出:
5 101 0000000000000000000000000000000000000000000000000000000000000101
同样的方法可以应用于任何整数类型。注意面具的类型
long mask = 1L << i;
答案 12 :(得分:0)
此方法将int转换为String,length = bits。用0填充或用截断的最高有效位填充。
static String toBitString( int x, int bits ){
String bitString = Integer.toBinaryString(x);
int size = bitString.length();
StringBuilder sb = new StringBuilder( bits );
if( bits > size ){
for( int i=0; i<bits-size; i++ )
sb.append('0');
sb.append( bitString );
}else
sb = sb.append( bitString.substring(size-bits, size) );
return sb.toString();
}
答案 13 :(得分:0)
您可以使用lib https://github.com/kssource/BitSequence。它接受一个数字并返回bynary字符串,填充和/或分组。
String s = new BitSequence(2, 16).toBynaryString(ALIGN.RIGHT, GROUP.CONTINOUSLY));
return
0000000000000010
another examples:
[10, -20, 30]->00001010 11101100 00011110
i=-10->00000000000000000000000000001010
bi=10->1010
sh=10->00 0000 0000 1010
l=10->00000001 010
by=-10->1010
i=-10->bc->11111111 11111111 11111111 11110110
答案 14 :(得分:0)
for(int i=0;i<n;i++)
{
for(int j=str[i].length();j<4;j++)
str[i]="0".concat(str[i]);
}
str[i].length()
是数字长度,二进制为2表示为01,长度为2
将4更改为所需的最大数字长度。这可以优化为O(n)。
通过使用继续。
答案 15 :(得分:0)
//下面将处理正确的尺寸
public static String binaryString(int i) {
return String.format("%" + Integer.SIZE + "s", Integer.toBinaryString(i)).replace(' ', '0');
}
public static String binaryString(long i) {
return String.format("%" + Long.SIZE + "s", Long.toBinaryString(i)).replace(' ', '0');
}
答案 16 :(得分:0)
import java.util.Scanner;
public class Q3{
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
System.out.println("Enter a number:");
int num=scn.nextInt();
int numB=Integer.parseInt(Integer.toBinaryString(num));
String strB=String.format("%08d",numB);//makes a 8 character code
if(num>=1 && num<=255){
System.out.println(strB);
}else{
System.out.println("Number should be in range between 1 and 255");
}
}
}