2012-11-21 26 views
1

我想從udp數據包讀取1位數據。如何從udp數據包讀取1位

UDP包看起來像這樣(C代碼):

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

如何在Java我可以閱讀?

到目前爲止,我有這個,但我不能讀富也不酒吧或鮑勃...

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

要測試了一下,你必須使用按位運算符例如:

這將測試值有位0b00001000設置

boolean result = value & 0x0A; 

這將返回該位的內容0b00001000

int value = value &〜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

我舉了一個例子,你也可以一次讀一個,等等。 –