Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Endianness refers to the ordering of bytes in memory that make up a larger chunk of memory.  There's plenty of information on there on wikipedia for examplemore in depth reading out there, but here's a quick overview.  Systems are usually really simple summary.  Most computer systems are either big-endian or little-endian.  Stealing  Here's a table copied from wikipedia's page on endianness (http://en.wikipedia.org/wiki/Endianness) that explains the difference:

Endian

First byte
(lowest address)

Middle bytes

Last byte
(highest address)

Notes

big

most significant

...

least significant

Similar to a number written on paper (in Arabic numerals as used in most Western scripts)

little

least significant

...

most significant

Arithmetic calculation order (see carry propagation)

...

Now say we want to send a uint16 (unsigned short) through acomms along with a bunch of other data.  Well  We'll probably be constructing a long array or of bytes and copying our data into it for transmission, then picking it back out at the other end.  Sticking with our simple uint16, let's look at how we can reconstruct the number given an array of bytes.  

...

Code Block
#include <iostream>
#include <string.h>
#include <vector>
#include <math.h>

using namespace std;

// our structure for sending data
struct MY_DATA {
	unsigned char packet_id;
	int latitude;
	int longitude;
	unsigned short heading;
};

int main() {
	// fill a struct with data
	MY_DATA data_to_send;
	data_to_send.packet_id = 0x01;
	data_to_send.latitude = (int) (42.358456 * pow(10,7));
	data_to_send.longitude = (int) (-71.087589 * pow(10,7));
	data_to_send.heading = 185;

	// construct our array/vector and fill it with data
	vector<unsigned char> packet (sizeof(data_to_send), 0);
	memcpy(&packet[0], &data_to_send.packet_id, sizeof(data_to_send));

	// to get our data out, do the reverse
	MY_DATA data_received;
	memcpy(&data_received.packet_id, &packet[0], sizeof(data_to_send));

	// print out the data
	cout << "packet id: 0x" << hex << (int) data_received.packet_id << dec << endl;
	cout << "lat: " << data_received.latitude / pow(10,7) << endl;
	cout << "lon: " << data_received.longitude / pow(10,7) << endl;
	cout << "heading: " << data_received.heading << endl;

	return 0;
}

Posting to MOOS

Writing a MOOS app and need to post your array of data to ACOMMS_TRANSMIT_DATA?  Here's two ways:

...

See Binary acomms data in MOOS for information on getting your serialized data into or out of a MOOS message.