2012-12-04 2 views
4

문자열 유형 2 진수를 비트로 변환하고 txt 파일에 쓰는 것에 대한 질문이 있습니다.자바에서 문자열 유형 2 진수를 비트로 변환

예를 들어 "0101011"과 같은 문자열이 있고 비트 유형 "0101011" 으로 변환하고 디스크의 파일에 쓰고 싶습니다.

나는 비트 문자열로 은밀한 어쨌든이 알고 싶습니다

..

내가 웹에서 검색 한

덕분에 그들이 bitarray 사용하는 것이 좋습니다하지만 난 확실하지 않다

+3

당신이 파일의 텍스트 "0101011"을 작성 하시겠습니까, 또는 바이트 0,101,011을 쓰고 싶어 출력을 볼 수 있습니까? –

+0

파일에 "010101"을 쓰면 문자열 유형 파일이라고 추측되므로 비트보다 많은 공간이 필요합니다. 따라서 Java 파일에서 문자열 형식의 이진수 "010101"을 얻은 다음 비트 유형으로 변환 한 다음 파일에 쓰고 싶습니다. –

답변

4

시도 이 :

int value = Integer.parseInt("0101011", 2); // parse base 2 

그런 다음 value의 비트 패턴은 문자열,663의 이진 해석에 해당합니다 210. 그런 다음 byte으로 파일에 value을 쓸 수 있습니다 (문자열은 8 진수가 8 자리 이하라고 가정).

편집Byte.parseByte("0101011", 2);을 사용할 수도 있습니다. 그러나 Java의 바이트 값은 항상 서명됩니다. 8 비트 (예 : "10010110", 십진수 150)를 사용하여 8 비트 값을 구문 분석하려고하면 byte에 맞지 않으므로 NumberFormatException이됩니다. "01111111"보다 큰 비트 패턴을 처리 할 필요가 없다면 Byte.parseByteInteger.parseInt과 마찬가지로 작동합니다.

리콜은하지만, 그 파일에 바이트를 작성, 당신은 단지 하나의 바이트를 기록에도 불구하고 int (안 byte) 값 — 소요 OutputStream.write(int)를 사용합니다. int 값으로 시작하는 것이 좋습니다.

+6

Byte.parseByte가 아닌 이유는 무엇입니까? – arshajii

+0

@ A.R.S. - 8 비트 세트로 바이트 값을 파싱 할 수 없다는 점을 제외하면 잘 작동합니다. 게다가, 'OutputStream'에 바이트를 쓰려면'int' 인자를 취해야합니다 (바이트 만 쓰려고 할지라도). 필자는 보통 Byte.parseByte()를 사용하여 "자체 문서화"하는 측면이 있지만 처음에는 int로 시작합니다. –

0

숫자 오버 플로우를 피하기 위해 아래 코드를 시도 할 수 있습니다.

long avoidOverflows = Long.parseLong("11000000000000000000000000000000", 2); 
    int thisShouldBeANegativeNumber = (int) avoidOverflows; 
    System.out.println("Currect value : " + avoidOverflows + " -> " + "Int value : " + thisShouldBeANegativeNumber); 

당신이

Currect value : 3221225472 -> Int value : -1073741824 
+0

문자열 유형의 이진수 "010101"을 비트 유형 –

+1

@DcRedwing으로 변환하고 싶습니다. '비트 유형'은 무엇을 의미합니까? * byte *를 의미합니까? – arshajii

+0

위의 대답은 큰 숫자를 오버플로없이 올바른 십진 형식으로 변환 할 때 유용합니다. –

0
//Converting String to Bytes 

bytes[] cipherText= new String("0101011").getBytes() 

//Converting bytes to Bits and Convert to String 

StringBuilder sb = new StringBuilder(cipherText.length * Byte.SIZE); 
     for(int i = 0; i < Byte.SIZE * cipherText .length; i++) 
      sb.append((cipherText [i/Byte.SIZE] << i % Byte.SIZE & 0x80) == 0 ? '0' : '1'); 

//Byte code of input in Stirn form 

     System.out.println("Bytecode="+sb.toString()); // some binary data 

//Convert Byte To characters 

     String bin = sb.toString(); 
     StringBuilder b = new StringBuilder(); 
     int len = bin.length(); 
     int i = 0; 
     while (i + 8 <= len) { 
     char c = convert(bin.substring(i, i+8)); 
     i+=8; 
     b.append(c); 
     } 

//String format of Binary data 

     System.out.println(b.toString());