1

UDP パケットから 1 ビットを読み取りたい。

udp パケットは次のようになります (c コード):

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

Javaでこれをどのように読むことができますか?

これまでのところ私はこれを持っていますが、fooもbarもbobも読めません...

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);
        }
    }
}
4

1 に答える 1

2

少しテストするには、ビットごとの演算子の例を使用する必要があります。

これは、値にビット 0b00001000 が設定されていることをテストします

boolean result = value & 0x0A;

これにより、ビット 0b00001000 の内容が返されます

int 値 = 値 & ~0x0A;

ここにあなたを助けるリンクがあります: http://vipan.com/htdocs/bitwisehelp.html

編集 :

一度に 2 ビットを読み取るには:

int nMask = 0x1A; // 0b00011000

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

nValue will contain bits at 0b00000011
于 2012-11-21T02:22:51.607 に答える