2011-12-31 5 views
5

문자열 배열이 있습니다. 각 배열 요소는 2 개의 문자로 구성된 hexString입니다.문자열 배열을 바이트 배열로 변환

예를 들어 배열 될 수있다 :

String a = {"aa","ff","00",.....} 

이 어떻게 자바에서 바이트의 배열로 문자열의 배열을 변환 할 수 있습니다 ?

+2

나는 최선의 방법은 문자열 배열과 같은 크기의 바이트 배열을 만들고, for 루프를 사용하고, 루프 호출'myBytes [i] = Byte.parseByte (myStrings [i], 16)'각 문자열 항목을 바이트로 구문 분석합니다 (** 편집 : ** oops, 기수를 잊어 버렸습니다!). –

+0

http://stackoverflow.com/questions/5425830/convert-the-hexadecimal-string-representation-of-some-bytes-into-a-byte-array-in이 링크를 사용하십시오. 거의 동일한 질문입니다. – dantuch

+0

@HovercraftFullOfEels - 답으로 게시 했어야합니다. – ziesemer

답변

0

올바르게 이해했다면 연결된 문자열의 바이트 표현이 필요합니까? 같은 뭔가 :

서명되지 않은 바이트 육각 문자열을 구문 분석하려면
public byte[] getBytes(String[] array) { 
    StringBuilder builder = new StringBuilder(); 
    for(String s: array) { 
     builder.append(s); 
    } 
    return builder.toString().getBytes(); 
} 
+2

다시 파싱 된 바이트가 아닙니다. 'getBytes()'는 개별 문자열을 바이트 표현으로 구문 분석하지 않고 각 문자의 기본 charset 인코딩을 사용합니다. 이 답변을 삭제하고 싶습니다. –

4

,

byte[] b = new byte[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = (byte) Short.parseShort(a[i], 16); 
} 

는 "FF"가 two's compliment에 따라, -1로 해석됩니다 사용합니다.

는 "FF는"당신은 당신은 ByteArrayOutputStream을 살펴해야 반바지

short[] b = new short[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = Short.parseShort(a[i], 16); 
} 
+0

그래,이게 내가 말하고있는거야. 1 + –

+0

예, 문자열이 ff 일 때 예외를 제공합니다 스레드 "main"의 예외 java.lang.NumberFormatException : 입력 문자열의 경우 : "ff" – user1077980

+0

@ user1077980 : 오류는 Aaron이 아니라 사용자의 것입니다. 귀하의 오류가 ff를 구문 분석하려고합니다. 바이트의 최대 값은 7f입니다. 대신 int로 구문 분석을 시도하십시오.** 편집 : ** 또는 JB Nizet의 훌륭한 추천서를 사용하십시오! –

0

를 사용해야합니다 (보유 할 수있는 자바 바이트 이상) 255 구문 분석합니다.

그런 다음 각 문자열을 반복하고 Byte.parseByte() 메서드를 사용할 수 있습니다. write 메서드를 사용하여 ByteArrayOutputStream에 추가 할 수 있습니다.

모든 문자열을 변환 한 후에는 ByteArrayOutputStream의 toByteArray() 메서드를 사용할 수 있습니다.

byte b = (byte) (Integer.parseInt(theHexaString, 16)); 

Byte.parseByte()를 사용

+0

ByteArrayOutputStream은 작동하지만 조금 지나치게 잔인합니다. 또한 Byte.parseByte()는 "ff"를 막습니다. –

3

배열을 통해 루프, 그리고 바이트 각 문자열 변환은 바이트에 서명 구문 분석하고, 부호 비트와 같은 부호 비트를 고려하지 않습니다.

관련 문제