简体   繁体   中英

Java 1.7 Byte Array to BitSet not working

try {
    new BitSet();

    byte[] packetData = new byte[receivePacket.getLength()];                
    packetData = receivePacket.getData();
    bits = BitSet.valueOf(packetData);  

    byte_header = Arrays.copyOfRange(packetData,0,12);
    byte_header_id = Arrays.copyOfRange(byte_header,0,2);
    byte_header_flags = Arrays.copyOfRange(byte_header,2,4);

    BitSet bits_packetData = BitSet.valueOf(receivePacket.getData());
    BitSet bits_header = BitSet.valueOf(byte_header);
    BitSet bits_header_flags = BitSet.valueOf(byte_header_flags); 

    System.out.println("packetData length:         " + receivePacket.getLength());
    System.out.println("byte_header length:        " + byte_header.length);
    System.out.println("byte_header_flags length:  " + byte_header_flags.length);
    System.out.println("bits_packetData length:    " + bits_packetData.size());
    System.out.println("bits_header length:        " + bits_header.size());
    System.out.println("bits_header_flags length:  " + bits_header_flags.size());

} catch (Exception ex) { ex.printStackTrace(); }

Background: The above is taking data from a UDP packet sent to the client, and extracting data from the packet. The seemingly anomalous output is as follows:

packetData length: 44
byte_header length: 12
byte_header_flags length: 2
bits_packetData length: 384
bits_header length: 64
bits_header_flags length: 64

The only numbers that look correct on here are the packetData length, byte_header_length, and byte_header_flags_length. packetData bytes * 8 bits does not equal 384. byte_header_length * 8 bits does not equal 64, and byte_header_flags_length * 8 bits surely does not equal 64!!

Can anyone please clarify what I am doing wrong, and point me in the right direction?

Thanks!

The BitSet size method doesn't do what you expected.

The BitSet size implementation happens to use longs to hold the bits. Thus you will see sizes in multiples of 64.

The BitSet length method returns the logical size of the BitSet. This is propbably what you should be using.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM