2014-07-17 5 views
1

이 코드가 221을 반환하는 이유는 무엇입니까? 이 논리 뒤에있는 논리는 무엇입니까? 어떻게 작동합니까? Java에 익숙하지 않기 때문에이 사실을 설명해주십시오.자바에서 바이트를 사용하는 방법은 무엇입니까?

import java.io.UnsupportedEncodingException; 


public class Checksrting { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     byte[] byteArray = new byte[2]; 
     byteArray[0] = 100; 
     byteArray[1] = 100; 

     Long ID = null; 
     try { 
      ID = Long.parseLong(new String(byteArray, "utf-8").trim(), 16); 
      System.out.print(ID); 
     } catch (NumberFormatException | UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

그렇다면 utf-8 및 16의 사용법은 무엇입니까?

답변

7

100d 문자와 같습니다. 따라서 문자열은 dd이됩니다.

당신은 당신은 16 진수 형식으로, 긴 문자열을 숫자로 변환하는

ID = Long.parseLong(new String(byteArray, "utf-8").trim(), 16); 

할 때.

dd의 십진수 값은 221이므로 그 결과를 얻을 수 있습니다.


UTF-8, 16의 사용은 무엇인가?

utf-8

는 문자열 생성자 문자열을 구축하는 데 사용하는 문자 인코딩이며, 16 긴로 문자열을 변환하는 데 사용되는 기수입니다.

0

"utf-8"은 문자 인코딩, 즉 String이 바이트로 표시되는 방식입니다.

UTF-8은 가변 길이 인코딩을 사용하며 ASCII 문자는 최고 비트가 0 인 단일 바이트로 나타낼 수 있습니다. 이는 d의 경우이며 100으로 표시됩니다 (10 진법). 당신이 수 (100)와 2 바이트를 가지고 있기 때문에,이 "dd"

16 String에서 Long으로의 변환에 사용되는 기수 인 문자열로 변환, 그래서 이것은 진수 표기법으로 문자열에서 변환합니다.

d의 16 진수 표기법은 십진수 표기법으로 13입니다. 그래서 dd가된다 13 * 16 + 13 = 208 + 13 = 221

0

당신은 String 생성자는 매개 변수 캐릭터 세트 얻는 문서에서 볼 수 있듯이 :

Constructs a new String by decoding the specified array of bytes using the specified charset. The length of the new String is a function of the charset, and hence may not be equal to the length of the byte array. 

그리고 16가 사용하는 것입니다 radix입니다 변환 :

0

에서 문서보기 dd 문자열을 16 진수로 변환하므로 221을 반환합니다. 문자로 변환되고,이 ByteArray [0] (100)를 포함이 문으로

new String(byteArray, "utf-8").trim(); 

는 표현은 'D'는이 ByteArray 2 개 요소가 따라서, 문자열 'DD'를 생성하고 진수로 문자열 변환 암호.

new String(byteArray, "utf-8").trim(); 

복귀 'DD' 정규식 파라미터 16 주어진 따라서 16 진수 즉 포맷으로 변환 될 때 다음이 긴 값으로 분석된다; 221

Long.parseLong("dd",16); 
0

나는 이전 답변에 동의하지만 이런 종류의 문제를 파악하는 방법에 대한 조언을 추가하고 있습니다. 당신은 문제가 복잡한 표현을 이해가있는 경우

첫째, 지역 변수로 하위 표현식을 추출하고이 변수 인쇄 :

 String s1 = new String(byteArray, "utf-8"); 
     System.out.println("s1: |" + s1 + "|"); 
     String s2 = s1.trim(); 
     System.out.println("s2: |" + s2 + "|"); 
     ID = Long.parseLong(s2, 16); 
     System.out.print(ID); 

그것은 지금 인쇄 :

s1: |dd| 
s2: |dd| 
221 

다음, 모양을 개별 하위 표현식에서. 호출에 대해 이해할 수없는 부분이 있거나 호출 한 내용이 있으면 API 설명서를 참조하십시오.

예를 들어 "16"에 대한 질문을했습니다. Long.parseLong(String s, int radix) 설명서에는 "문자열 인수를 두 번째 인수에서 지정한 기수로 부호있는 long으로 구문 분석합니다.". 수정 된 프로그램의 결과는 s이 "dd"임을 보여 주므로 "dd"를 16 진수로 구문 분석합니다. 프로그래머의 계산기는 16 진수 "dd"가 십진수 221임을 보여줍니다.

관련 문제