2014-06-06 5 views
0

vortex.labs.overthewire.org의 포트 5842에 연결하고 호스트 바이트 순서로 4 개의 부호없는 정수를 읽으려고합니다. 서버 vortex.labs.overthewire.orgis 32 비트 x86 머신에서 (작은 엔디안 아키텍처를 의미) Java에서 이와 비슷한 형태가 될 수 있습니까?소켓에서 리틀 엔디안 바이트 순서로 부호없는 정수를 읽음

Socket socket = new Socket("vortex.labs.overthewire.org", 5842); 
InputStream in = socket.getInputStream(); 
int c; 
while((c=in.read())!=-1){ 
    System.out.println((byte)c); 
} 

답변

1

정수는 32 비트 시스템에서 4 바이트 값으로 전송됩니다.

Socket socket = new Socket("vortex.labs.overthewire.org", 5842); 
DataInputStream in = new DataInputStream(socket.getInputStream()); 

byte[] intData = new byte[4]; 

for (int i = 0; i < 4; i++) { 
    in.readFully(intData); 
    System.out.println(ByteBuffer.wrap(intData) 
      .order(ByteOrder.LITTLE_ENDIAN).getInt()); 
} 

관련 :! 그래서 당신은 배열로 4 바이트를 읽을 필요가 다음의 int로 그 변환 How can I convert a 4-byte array to an integer?

0

올바른 방향입니다. 당신은 4 개의 정수를 읽고 싶다고 언급했습니다. close 입력 스트림에 잊지 말고, 또한

byte[] bytes; 
for (int i=0; i<4; i++) { 
    bytes = new byte[4]; 
    for (int j=0; j<4; j++) { 
     bytes[j] = (byte) in.read(); 
    } 
    int x = java.nio.ByteBuffer.wrap(bytes).order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt(); 
    System.out.println(x); 
} 

: 어쩌면에 대한 루프를 사용하는 것이 좋을 것이다.

+0

하나의 정수 = 100 바이트 –

+0

이 4 바이트를 읽어, 영업 이익은 아마 조립 필요 little endian 형식의 4 바이트를 32 비트 정수로 변환합니다. 그리고 4 번 그렇게해라. – nos