2012-11-21 4 views
1

udp 패킷에서 1 비트를 읽으려고합니다.udp 패킷에서 1 비트를 읽는 방법

UDP를 패킷이 (C 코드)과 같습니다

struct typedef struct s_foo 
{ 
    __u32 foo; 
    __u8 bar:1, 
     bob:1; 
} __attribute__((packed)) s_foo; 

자바 난이 어떻게 읽을 수 있습니까?

이 그 값을 테스트합니다 :

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 

public class BroadcastListener 
{ 
    public static void main(String[] args) throws IOException 
    { 
     if (args.length != 1) { 
      System.out.println("usage: <program> port"); 
      System.exit(1); 
     } 

     int port = Integer.parseInt(args[0]); 
     DatagramSocket dgram = new DatagramSocket(port); 

     byte[] buffer = new byte[2048]; 
     DatagramPacket packet = new DatagramPacket(buffer, buffer.length); 

     while (true) { 
      dgram.receive(packet); 

      String msg = new String(buffer, 0, packet.getLength()); 

      System.out.println(packet.getAddress().getHostName() + ": " 
        + msg); 

      packet.setLength(buffer.length); 
     } 
    } 
} 
+0

이 경우 대답으로 표시하십시오! –

답변

2

당신이 비트 연산자의 예를 사용해야합니다 비트를 테스트하려면 ...

은 지금까지 나는이 문제를 가지고 있지만 난 foo는 읽지도, 바 또는 밥 없습니다 비트가

boolean result = value & 0x0A; 

을 설정 0b00001000있다 이렇게하면 비트의 내용을 반환합니다 0b00001000

int 값 = 값 & ~ 0x0A;

여기에 당신에게 도움이되는 링크입니다 : http://vipan.com/htdocs/bitwisehelp.html

편집 :

한 번에 두 개의 비트를 읽으려면 :

int nMask = 0x1A; // 0b00011000 

nValue = nValue & nMask; 
nValue = nValue >> 3; 

nValue will contain bits at 0b00000011 
+0

이제 2 비트 필드라는 것을 잠깐 얘기합시다. 지금은 무엇입니까? – user1530147

+0

예를 들어 한 번에 하나씩 읽을 수도 있습니다. –

관련 문제