Я пытаюсь сериализовать сообщение в C ++ в рамках ROS. Мой код даже работает, он просто кажется таким грязным. Есть лучший способ сделать это? Потому что копирование одного буфера в другой, не похоже на очень хорошее решение с точки зрения производительности ...
namespace ser = ros::serialization;
void callback(const sensor_msgs::LaserScan::ConstPtr & scan)
{
trans = bp->lookupTransform("laser", "map", ros::Time(0));
uint32_t scan_s = ros::serialization::serializationLength(*scan);
uint32_t trans_s = ros::serialization::serializationLength(trans);
ROS_INFO("Scan has serialization length: %i", scan_s);
ROS_INFO("Trans has serialization length: %i", trans_s);
/* Serialization: */
char buffer_[scan_s];
boost::shared_array<uint8_t> buffer(new uint8_t[scan_s]);
ser::OStream stream(buffer.get(), scan_s);
ser::serialize(stream, *scan);
for ( int i = 0; i < scan_s; i ++) {
buffer_[i] = buffer[i];
}
ofstream output_file("test.data", ios::app);
output_file.write(buffer_, scan_s);
output_file.close();
}
Кроме того, что говорит этот странный синтаксис buffer(new ...)
? Я даже не могу понять, как вызвать delete
для этого.
Кроме того, я не уверен, является ли копирование объекта buffer
правильным. В чем разница с stream
?