2012-06-27 2 views
0

문자열을 2 바이트가 다른 바이트 배열로 변환하려고합니다. 예 용 : String s1 = " 055E"는 I 난, B2 B1의 값을 가질 것이다 바이트 배열을 가질 필요가 말 등으로문자열을 바이트로

byte b1 = Integer.parseInt(05,16); - 1byte 

byte b2 = Integer.parseInt(5E,16); - 1byte 

이것을 변환 할 필요가있다.

byte[] b = {b1, b2};  

이 문제에 대한 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+1

의 중복 가능성 [?이 바이트 문자열 진수로 변환하는 가장 좋은 방법입니다 (http://stackoverflow.com/questions/2648242/is-this- 가장 좋은 방법으로 변환하는 문자열 - 16 진수 - 바이트) 및 http://stackoverflow.com/questions/140131/convert-a-string-representation-of-a-hex-dump-to-a -byte-array-using-java – Thilo

답변

2

이 시도 :

String s1 = " 055E"; 
s1 = s1.trim(); 
byte[] b = { 
    (byte) Integer.parseInt(s1.substring(0, 2), 16), 
    (byte) Integer.parseInt(s1,substring(2), 16) 
} 
+0

고맙습니다. 그러나 배열에는 4 가지 다른 값이 있습니다. 내가 뭔가를 05 같은 int로 변환해야합니다, 5E int로 변환해야합니다 & b1 정수를 상응하는 있어야합니다, b2 정수가 이에 상응하는 있어야합니다 ... 그래서 결과 배열 b 2 값이 있어야합니다. – SilentCoder

+0

@ sarath - 귀하의 의견을 이해할 수 없습니다. 배열은 4가 아닌 2 개의 값을가집니다. 제 코드는 여러분이 묘사하는 것과 정확히 똑같습니다 : '05'를'int' 값으로 바꾸고 그것을'byte'로 좁히고'5E'와 똑같이합니다. –

+0

int 값을 얻기 위해 배열을 반복해야한다고 생각합니다. 나는 단지 자바에 익숙하지 않았기 때문에 많은 것을 알지 못한다. 왜냐하면 나는 단지 배열을 출력하려고 할 때 [B @ fe347 – SilentCoder

-1

먼저 배열에 충분한 메모리를 할당하십시오. 그런 다음 모든 문자 쌍을 반복하여 바이트로 변환하십시오. 결과를 배열에 저장하십시오.

s = s.trim(); 
byte[] b = new byte[s.length()/2]; 

for(int i = 0; i < s.length(); i+= 2) { 
    b[i/2] = Byte.parseByte(s.substring(i,i+2),16); 
} 
+2

'b [1]'(또는 다른 홀수 색인'b' 값)에 값을 할당하지 않습니다. 또한 "05DE"와 같은 문자열에 대해서는 예외를 던질 것이고 선행 공백은 처리하지 않습니다. –

+0

회의에 출근해야합니다. 이제 해결되었습니다. – tskuzzy

+0

죄송합니다. 아직 수정되지 않았습니다. 'Byte.parseByte'는 최대 0x7F의 값만 구문 분석합니다. 그 후, 그것은'NumberFormatException'을 던집니다. (문제는 '0x80> Byte.MAX_VALUE'입니다.) –

관련 문제