Transform & De-transforming 32-bit representation of a double value

0 votes
I'm designing a probe balloon for a drone using the Raspberry Pi 3B+ and I need to transmit a lot of information through a limited communication that is restricted to messages within just 12 bytes. My information mainly comprises all the values of the parameters surrounding it like altitude, temperature, longitude, latitude, average acceleration, etc.

Now, I'm building my datagram where I wanted to do a 32-bit lossy conversion for all the longitude and latitude values as they would be huge otherwise. Are there some APIs or tools I can use for these conversions? And, if not, how else can I do it? It's also okay if the storage is done using floating point values or even just the fixed points would be fine as well. I just have to ensure that the rounding and its conversions go flawlessly. I've been using python, but I'm open to solutions in Java or alike also. Please help! TIA!
Nov 16, 2018 in IoT (Internet of Things) by Bharani
• 4,550 points

1 answer to this question.

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
0 votes

So, if it's a double, it'd be easier translating it to 64-bits using long Double.doubleToLongBits(double value) and, converting it back using double Double.longBitsToDouble(long bits).

And, if its float values that you're converting to 32-bit values and then back again, you could use the functions, floatToIntBits(...) and intBitsToFloat(...).

But, for converting a double value to its 32 bits representation, you'd need a 2-step conversion, where you'd have to first convert it into a float value first:

double val = ...;
int bits = Float.floatToIntBits( (float) val );

And, with this, you convert it back:

int bits = ...;
double val = (double) Float.intBitsToFloat(bits);

Here's how the packing and unpacking directly to a buffer happens:

ByteArrayOutputStream baos = new ByteArrayOutputStream(20);
DataOutputStream dos = new DataOutputStream( ... );
dos.writeFloat( altitude );
dos.writeFloat( max_temperature );
dos.writeFloat( longitude );
dos.writeFloat( latitude );
dos.writeFloat( average_acceleration);
byte[] data = baos.toByteArray();

But, you'll have to pick only some selected values that you convert to 32 bits, and figure out the ones you can truncate to occupy lesser space as all of this still generates a 20 bytes buffer (5 x 32-bit floats) and not a 12 bytes buffer.  

And, for unpacking, you should be using a DataInputStream and readFloat(), like this:

ByteArrayInputStream bais = ...
DataInputStream dis = new DataInputStream(bais);
altitude = dis.readFloat();
max_temperature = dis.readFloat();
answered Nov 16, 2018 by DataKing99
• 8,100 points

Related Questions In IoT (Internet of Things)

0 votes
1 answer
0 votes
1 answer

I want to perform Type Conversion of Date Type Value

Instead of returning return Long.toHexString(date.getTime()); Return following return Long.toHexString(date.getTime()/1000); As correctly ...READ MORE

answered Aug 3, 2018 in IoT (Internet of Things) by anonymous2
• 4,260 points
0 votes
1 answer
0 votes
1 answer

Components of a BLE protocol

You have to search for the customized ...READ MORE

answered Sep 27, 2018 in IoT (Internet of Things) by anonymous2
• 4,260 points
0 votes
1 answer

how can i count the items in a list?

suppose you have a list a = [0,1,2,3,4,5,6,7,8,9,10] now ...READ MORE

answered May 2 in Python by Mohammad
• 1,400 points
0 votes
1 answer

RPMs for IoT Agents of Backend Device Management GE in FIWARE IoT ecosystem

The RPMs for IDAS component are availaible. ...READ MORE

answered Jul 29, 2018 in IoT (Internet of Things) by DataKing99
• 8,100 points
0 votes
1 answer

Running a childProcess as shell script with node.js server

Here's what I think, you could pass ...READ MORE

answered Aug 14, 2018 in IoT (Internet of Things) by DataKing99
• 8,100 points

© 2018 Brain4ce Education Solutions Pvt. Ltd. All rights Reserved.
"PMP®","PMI®", "PMI-ACP®" and "PMBOK®" are registered marks of the Project Management Institute, Inc. MongoDB®, Mongo and the leaf logo are the registered trademarks of MongoDB, Inc.