스칼라에는 바이너리 데이터 용 포맷터가 내장되어 있습니까? 인쇄하기 예를 들어스칼라에서 바이너리 값 서식 지정
: 00000011 하나는 어렵지 않을 것이다 쓰기 int 값 3.
을위한 - 존재하는 경우 그냥 궁금.
def toBinary(i: Int, digits: Int = 8) =
String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')
스칼라에는 바이너리 데이터 용 포맷터가 내장되어 있습니까? 인쇄하기 예를 들어스칼라에서 바이너리 값 서식 지정
: 00000011 하나는 어렵지 않을 것이다 쓰기 int 값 3.
을위한 - 존재하는 경우 그냥 궁금.
def toBinary(i: Int, digits: Int = 8) =
String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')
scala> 3.toBinaryString
res0: String = 11
스칼라는 방법이있는 RichInt하는 지능에서 암시 적 변환이 있습니다
내가 직접 API의 방법을 모르는여기에 그것을 할 만 할 그 일을하는 한 가지 방법입니다 toBinaryString. 이 함수는 선행 0을 인쇄하지 않습니다.
val x = 5
val str = Integer.toString(x,2)
그냥 라 우리의 대답처럼, 그것은 앞의 0을 인쇄하지 않습니다
당신은 같은 것을 수행 할 수 있습니다
scala> val x = 3
x: Int = 3
scala> Integer.toString(x, 2)
res4: java.lang.String = 11
은 다른 제안과 마찬가지로,이 앞에 0이없는을 ... 0을 선두에 추가해, 3 번에 대한
8 자리 :
printf ("%08d", 3.toBinaryString.toInt)
00000011
Hosam Aly가 String을 만들 것을 제안 했으므로 여기에 방법을 사용하십시오.
이진 값은 긴 매우 빠르게 얻을 수 있기 때문에 긴을 사용하는 일반적인 경우는 더 적합 :
scala> asNdigitBinary (1024*512-1, 32)
res23: String = 00000000000001111111111111111111
그래서 명심 - 숫자로 숫자를 생성하고이를 채우는 selfmade, 재귀 적 접근 BigInt의 임의의 값을 처리하기 쉽게 끝납니다.
def toBinDigits (bi: BigInt): String = {
if (bi == 0) "0" else toBinDigits (bi /2) + (bi % 2)}
def fillBinary (bi: BigInt, len: Int) = {
val s = toBinDigits (bi)
if (s.length >= len) s
else (List.fill (len-s.length) ("0")).mkString ("") + s
}
그것은 좋은 것,
def asNdigitBinary (source: Int, digits: Int): String = {
val l = BigInt (source.toBinaryString.toLong)
String.format ("%0" + digits + "d", l)}
작동,하지만 "% 0Nd는"의 BIGINT 숫자에 대한 일치하지 않는 경우. 어쩌면 버그 리포트/기능 요청을해야할까요? 하지만 스칼라 또는 Java?
에서 자바를 사용하는 방법에 대한 악한 아무것도 잊고 계속이 좋은 답변입니다. '및 String.format ("%의 08D"3.toBinaryString.toInt.asInstanceOf [오브젝트]) @HosamAly' –
: 당신이 대신 시도해 볼 수도 있습니다'예를 들어 인쇄하기 : 00000011을 3.' –
좋은 int 값에 대한 잡기. :) 그럼에도 불구하고 답변에 일반 버전을 추가하는 것이 중요합니다. 나는 그것을 나의 것에 추가했을 것이다. 그러나 나는 그것이 당신의 생각이라고 믿는다. –
이가 앞에 0이 인쇄됩니다 :
def int2bin(i: Int, numPos: Int): String = {
def nextPow2(i: Int, acc: Int): Int = if (i < acc) acc else nextPow2(i, 2 * acc)
(nextPow2(i, math.pow(2,numPos).toInt)+i).toBinaryString.substring(1)
}
나는 보통 원하는 길이 -1 제로를 앞에 추가하는 데 사용 후 바로 오른쪽 문자를 잘라는 :
"0000000" + 3.toBinaryString takeRight 8
이 음수 잘 작동 값도 포함됩니다.
+1을 추가하는 경우 +1 ;-) – Jack
@JacobusR Thanks. 실제로 나는 당신이 질문 한 내용에 대해 당신이 질문 한 내용이라고 생각합니다. "변환기가 아닌 내장 된 * 포맷터"를 요구합니다!그것이 가능한 변수에 저장하는 대신에 결과를 출력하는 것을 제외 –