[ros-users] Message construction with memcpy

Bill Morris morris at ee.ccny.cuny.edu
Fri Jul 9 00:44:06 UTC 2010


On Thu, 2010-07-08 at 17:22 -0700, Josh Faust wrote:
> Using memcpy is not possible right now due to the Message base class
> (which is going away in the future).  Even once that's gone though
> it's unlikely to work for most messages.  For example:
> 
> 
> struct A
> {
>   char a;
>   int b;
> };
> 
> 
> sizeof(A) == 8 (not 5), and offsetof(A, b) == 4 (not 1) on x64, but
> may be different on different architectures.

struct FOO
{
  uint16_t x;
  int32_t k;
};

I suppose something like this will also have alignment issues.

> If the data is in the ROS serialization format (see the table under
> built-in types
> at http://www.ros.org/wiki/msg#Message_Description_Specification), you
> may be able to use the ROS serialization code
> (http://www.ros.org/wiki/roscpp/Overview/MessagesSerializationAndAdaptingTypes)
> 
> 
> Unless you're doing this for a large number of devices/messages, it's
> probably easiest (and least brittle) to read the individual values
> manually into the message.

Right now I have 8 messages types and about 100 values total, so I would
like a better solution. I'll take a look at deserializing the objects.

Do I have to worry about endianness when using the serialization code? 




More information about the ros-users mailing list