2012-05-15 3 views
0

작은 자바를 배우기 시작했으며 매우 간단한 작업 일 가능성이 높습니다.하지만 그걸로 고민하고 있습니다. Java Int를 16 진수로 변환하고 바이트 배열 요소에 붙여 넣습니다.

는 I 바이트 배열이 인사 :

byte[] test = {(byte) 0x0a, (byte) 0x01, (byte) 0x01, (byte) 0x0b}; 

및 I 시험을 변경할 [3], 현재 (0B), 랜덤 무언가 번호 11의 마지막 값.

Random generator = new Random(); 

int newTest3 = generator.nextInt(255); 

이제 newTest3에 난수가 생겼습니다. 이 16 진수 (FF로) 변환하고 테스트 또는 테스트 [3] 마지막 요소로 배치 할 싶습니다.

나는 이것에 관해 나를 많이 도와 줄 수 없었다. 그리고 나는 문자 그대로 단지 몇 시간 전에 자바를 집어 들었다. 그래서 어떤 도움도 굉장 할 것이다! 당신은 너무 많은 문제를 가서 왜 사전에

감사합니다 :)

+0

Int를 16 진수로 변환해도 아무런 센스가 없습니다. Hex, Decimal 및 Binary는 int 표현입니다. 16 진수 값은 저장할 수 없습니다. 이름에도 불구하고 Byte는 -128, 127 사이의 숫자 일뿐입니다. –

답변

3

를 사용합니다. 를 사용하여 명시 적 캐스트가 이미 :) 을하고있는 것처럼 당신은 쓸 때 :

byte[] test = {(byte) 0x0a, (byte) 0x01, (byte) 0x01, (byte) 0x0b}; 

0x0a은 실제로 당신이 명시 적으로 바이트로 캐스팅하는 int입니다. newTest3에서도 똑같이 할 수 있습니다.

test[3] = (byte) newTest3; 

이러한 유형의 캐스트에는 일반적으로 바이트가 단지 8 비트이고 int가 32 비트이므로 데이터가 손실된다는 점에 유의하십시오. 그래서 예를 들면 (FFFFFFFF는 FF로 캐스팅 될 것입니다).

+0

그는'Random.nextInt (int)'를 사용하고 있기 때문에 호출 결과는'0'에서'255'까지 보장되므로 아무 것도 손실되지 않습니다. – QuantumMechanic

+0

퀀텀이 방금 말한 것을 생각해 보면, 그 답이 완벽합니다! 두 분 모두에게 감사 드리며 여기에있는 다른 답변 제시 자들 : –

+0

@QuantumMechanic은 데이터 손실을 피하기 위해 'generator.nextInt (255) -128;'을 사용해야합니다. 바이트가 부호있는 8 비트 숫자임을 잊지 마십시오. –

2

은 내가 볼 수없는 바이트 버퍼

// elsewhere 
import java.nio.ByteBuffer; 

byte[] arr = new byte[4]; 
ByteBuffer buf = ByteBuffer.wrap(arr); 
buf.putInt(generator.nextInt(255); 
+0

buf.put ((byte) generator.nextInt (255)); – david

+0

안녕하세요! 그 중 하나는 약간의 테스트를 시도하고 약간의 문제가 발생했습니다 : buf.write 메소드에 "심볼을 찾을 수 없습니다"라고 말했습니다. 어떤 제안? –

+0

@GGati, 제 수정 내용보기 – david

관련 문제