2017-03-11 1 views
2

현재 QR 코드 스캔을하고있는 Im이 잠시 머물러 있습니다.1과 0의 문자열에서 텍스트 만들기

내가 지금까지 가지고있는 것은 "100010100101 ...."과 같이 1과 0의 문자열입니다. 내가 다음에해야할 일은 항상 8 비트를 분리하여이 문자열을 바이트로 변환하는 것입니다.

이 바이트들과 함께 나는 이것을 "ISO8859_1" Standart로 텍스트로 디코드하려고합니다.

내 문제는 다음과 같습니다. 내 결과는 내가 원하는 것입니다. 이건 내 코드입니다 :

나에게 캐스트 (바이트) 나는 그것을 이해하기 때문에 다른 바이트 배열에 저장하는 방법을 작동하지 않는 것을 생각 무엇
for(int i = 0; i <= numberOfInt; i++){ 
     String character = ""; 
     for(int j = 0;j < 8; j++){ 
      boolean bool = tResult.remove(0); //tResult is a List of 1s & 0s 
      if(bool){ 
       character = character + '1'; 
      }else{ 
       character = character + '0'; 
      } 

     }  

     allcharacter[byteCounter] = (byte)Integer.parseInt(character,2);//I think this Line is where the mistake is. 
     byteCounter++; //Variable that counts where to put the next bit 



    } 
    String endresult =""; 
    try { 
     endresult = new String(allcharacter,"ISO8859_1"); 
    } catch (UnsupportedEncodingException e) { 

     e.printStackTrace(); 
    } 
    return endresult; 

.

도움 주셔서 감사합니다.

+0

실수는 아마도 다른 곳에서 발생했을 것입니다. 최적 상태에서 멀리 떨어져있는 것 외에도 tResult는 가장 중요한 비트가 먼저 나열된 8 개의 그룹으로 구성된 부울 목록이므로 각 8 부울 그룹은 ISO 8859-1 문자를 나타냅니다. 적어도 샘플 입력과 그 입력에 대한 예상 출력이 필요합니다. –

답변

0

String 클래스의 부분 문자열 메서드를 사용하여 처음 8자를 가져온 다음 8 자 (비트로 처리)를 문자 (8 비트이기도 함)로 변환 할 수 있습니다. 각 문자를 정수로 파싱 한 다음 바이트로 캐스팅하는 대신 각 문자를 확인하고 1을 칠 때마다 바이트 값에 2를 곱해야합니다. 이렇게하면 0-255 사이의 값이됩니다. 각 바이트는 유효한 문자를 제공해야합니다.

또한 Byte 클래스와 해당 메소드를 확인하고 싶을 수 있습니다. 이미이 방법이 있습니다.

편집 : There you go.

편집 2 : this 바이트 캐스팅에 대한 int가 사용자에게 생각했던 결과를 제공하지 않는 이유는 무엇입니까?

0

좋아요, 나는 거의 바이트로 작업하지 않으므로 그면에서는 쓸모가 없습니다. 그러나 바이너리를 여러 번 문자열로 변환했습니다. 그 뒤에있는 논리는 이진 문자열을 십진수 int로 변환 한 다음 int에서 char로 변환 한 다음 char에서 string으로 변환하는 것입니다. 여기 내가 어떻게하는지.

String list = "100111000110000111010011" //24 random binary digits for example 
String output = ""; 
char letter = ''; 
int ascii = 0; 
//Repeat while there is still something to read. 
for(int i = 0; i < list.length(); i+=8){ 
    String temp = list.substring(i,i+8); //1 character in binary. 
    for(int j = temp.length()-1; j >= 0; j--) //Convert binary to decimal 
     if(temp.charAt(j) == '1') 
      ascii += (int)Math.pow(2,j); 
    letter = (char)ascii; //Sets the char letter to it's corresponding ascii value 
    output = output + Character.toString(letter); //Adds the letter to the string 
    ascii = 0; //resets ascii 
} 
System.out.println(output); //outputs the converted string 

이 도움이 되었기를 바랍니다.

관련 문제