Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #38038

Re: bit package

From Daniele Futtorovic <da.futt.news@laposte.net>
Newsgroups comp.lang.java.programmer
Subject Re: bit package
Date 2018-02-17 20:55 +0100
Organization A noiseless patient Spider
Message-ID <p6a1cr$okp$1@dont-email.me> (permalink)
References <bebd1080-35be-485d-ac9d-f7e2d4b361da@googlegroups.com> <p696af$tiv$1@dont-email.me> <c08311e7-0ff3-46b8-823a-0b89b3b312ac@googlegroups.com>

Show all headers | View raw


On 2018-02-17 16:51, Philipp Kraus wrote:
> Am Samstag, 17. Februar 2018 13:14:22 UTC+1 schrieb Eric Sosman:
>> On 2/17/2018 3:33 AM, Philipp Kraus wrote:
>>> Hello,
>>>
>>> I'm building a network communication protocol for hardware-communication, so I need a bit representation of my dara like a C struct:
>>>
>>> struct
>>> {
>>>      unint8 field1;
>>>      unint16 field2;
>>> ...
>>> }
>>
>>      Aside: This approach won't always work, not even in C.  (Think
>> padding bytes, endianness, ...)
>>
>>> On my Java classes I have got int, long, ... so how can I create such bit structures?
>>> My first try is to use a BitSet and convert all datatypes manually, but is there a better possibility to create such bit sequences. I need a sending and receiving structure. I'm working with Java 9.
>>>
>>> I the best case I create an object like
>>>
>>> BitObject l_obj = new BitObject( 8, 16, 8, 32 );
>>> l_object.set(0, mybyte)
>>> l_object.set(1, myshort)
>>> l_object.set(2, mybyte)
>>> l_object.set(3,  myint)
>>>
>>> and on reseiving
>>>
>>> BitObject l_obj = new BitObject( mybytearray_from_socket, 8, 16, 8, 32 );
>>> l_obj.get(0)
>>> l_obj.get(1)
>>> ...
>>>
>>> Can you suggest a library or anything for doing this?
>>
>>      It's not clear to me precisely what you're trying to do (the
>> semantics of l_object.set() are not obvious), but I think you might
>> find java.nio.ByteBuffer a good starting place.
>>
> 
> I'm searching something like Node.JS Buffer for Java
> https://nodejs.org/api/buffer.html
> 

Don't use a BitSet for this; it's not really what it's for or what it
represents -- a set of bits. As Eric says, the closest equivalent will
be java.nio.Buffer and its variants, particularly ByteBuffer.

There are no unsigned primitive types (char aside, where it's likely
best left be for your purposes) in Java, so you'll have to mask around, e.g.
 uint8 -> 1 byte -> Java byte type: int uint8 =  uint8_byte & 0xff,
 uint16 -> 2 bytes -> Java short type: int uint16 = uint16_short & 0xffff,
and so forth. Note that you will not be able to represent an unsigned
64-bit integer in Java using a primitive; you'll have to use BigInteger.

Arne's lib may be a nice and easy alternative. There should be some
ASN.1 and DER libs around as well, if applicable.

-- 
DF.

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

bit package Philipp Kraus <philipp.kraus.flashpixx@gmail.com> - 2018-02-17 00:33 -0800
  Re: bit package Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-02-17 07:14 -0500
    Re: bit package Kiwi User <martin@mydomain.invalid> - 2018-02-17 12:40 +0000
      Re: bit package Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-02-17 08:16 -0500
    Re: bit package Philipp Kraus <philipp.kraus.flashpixx@gmail.com> - 2018-02-17 07:51 -0800
      Re: bit package Arne Vajhøj <arne@vajhoej.dk> - 2018-02-17 11:11 -0500
        Re: bit package Philipp Kraus <philipp.kraus.flashpixx@gmail.com> - 2018-02-17 11:41 -0800
          Re: bit package Arne Vajhøj <arne@vajhoej.dk> - 2018-02-17 14:55 -0500
      Re: bit package Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-02-17 11:12 -0500
        Re: bit package Arne Vajhøj <arne@vajhoej.dk> - 2018-02-17 12:27 -0500
      Re: bit package Daniele Futtorovic <da.futt.news@laposte.net> - 2018-02-17 20:55 +0100
  Re: bit package Robert Klemme <shortcutter@googlemail.com> - 2018-02-17 16:23 +0100
  Re: bit package Arne Vajhøj <arne@vajhoej.dk> - 2018-02-17 10:25 -0500

csiph-web