예를 들어 1, 2, 128, 256
출력은 (16 자리) 일 수 있습니다.
0000000000000001
0000000000000010
0000000010000000
0000000100000000
나는 시도했다
String.format("%16s", Integer.toBinaryString(1));
왼쪽 패딩을위한 공백을 넣습니다.
` 1'
0
패딩 에 s를 넣는 방법. Formatter 에서 찾을 수 없습니다 . 다른 방법이 있습니까?
추신 이 게시물 은 왼쪽 0 패딩으로 정수 형식을 지정하는 방법을 설명하지만 이진 표현은 아닙니다.
답변
이것이 차선책이라고 생각하지만 할 수 있습니다.
String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')
답변
java.util.Formatter에 내장 된 바이너리 변환은 없습니다. 다음과 같이 String.replace를 사용하여 공백 문자를 0으로 바꾸는 것이 좋습니다.
String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0")
또는 주어진 라인을 따라 추가 왼쪽 패딩 곳 이진 표현으로 변환 정수로 자신의 논리를 구현 이 너무. 또는 숫자를 형식으로 전달해야하는 경우 이진 표현을 BigInteger로 변환 한 다음 선행 0으로 형식을 지정할 수 있지만 다음과 같이 런타임시 매우 비용이 많이 듭니다.
String.format("%016d", new BigInteger(Integer.toBinaryString(1)))
답변
Apache Commons StringUtils를 사용할 수 있습니다 . 패딩 문자열에 대한 메소드를 제공합니다.
StringUtils.leftPad(Integer.toBinaryString(1), 16, '0');
답변
저는이 작업을 수행하기 위해 이전에 실제로 사용하지 않은 모든 종류의 메서드 호출을 시도했습니다. 그들은 보통의 성공을 거두었습니다. 제가 너무나도 간단해서 작동 할 수도 있다는 생각이 들기 전까지는 성공했습니다.
나는 그것이 긴 이진 코드 문자열에 대해 좋은지 확실하지 않지만 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;
답변
여기에 이전 게시물에 대한 새로운 답변이 있습니다.
이진 값을 선행 0으로 특정 길이로 채우려면 다음을 시도하십시오.
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 )
답변
user3608934의 아이디어에 대한 더 간단한 버전입니다. “이것은 오래된 트릭입니다. 16 0으로 문자열을 만든 다음 얻은 트리밍 된 이진 문자열을 추가합니다.”:
private String toBinaryString32(int i) {
String binaryWithOutLeading0 = Integer.toBinaryString(i);
return "00000000000000000000000000000000"
.substring(binaryWithOutLeading0.length())
+ binaryWithOutLeading0;
}
답변
“올바른”해결책은 모르지만 빠른 패치를 제안 할 수 있습니다.
String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0");
나는 그것을 시도했고 그것이 잘 작동하는 것을 보았다.