Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #38038
| 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> |
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
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