我想将一些信息和一些元数据打包到一个字节数组中。在下面的内容中,我有3个字节的信息,这些信息具有一定的偏移量,加上4个字节的元数据添加到包的末尾。我提出的解决方案1很明显可以做到这一点,但需要第二个tmp变量,这是我不太喜欢的。
int size = 3;
int metadata = 4;
unsigned char * test = new unsigned char[size];
unsigned char * testComplete = new unsigned char[size+metadata];
test[offest1] = 'a';
test[offest2] = 'b';
test[offest3] = 'c';
set_first_4bytes(testComplete, val );
memcpy(&testComplete[metadata], test, size);另一种简单的解决方案是通过以下方式完成:
unsigned char * testComplete = new unsigned char[size+metadata];
testComplete[offest1+metadata] = 'a';
testComplete[offest2+metadata] = 'b';
testComplete[offest3+metadata] = 'c';
set_first_4bytes(testComplete, val ); 然而,我不喜欢这里的事实,每次我有元数据偏移量添加,以便我在我的最终包获得正确的索引。有没有另一种优雅的解决方案,没有我的方法的缺点?
谢谢!
发布于 2009-08-03 12:07:42
将数据和元数据存储在单独的char数组中,放在一个结构中。在数组的长度上模板化结构。
发布于 2009-08-03 12:49:09
我建议您使用C++工具。使用真实的类来组成数据。在类内部,优先使用std::vector<>而不是普通数组来存储数据(除非确实需要将数据存储在堆中)。如果需要,您可以提供对向量中内部数据的常量访问器。
class data_type
{
public:
data_type() : data_(), metadata_() {}
const unsigned char * raw_data() const { // accessor to vector internal buffer
return &data_[0];
}
const std::vector< unsigned char >& data() const {
return data_;
}
const metadata_type& metadata() const {
return metadata_;
}
private:
std::vector< unsigned char > data_;
metadata_type metadata_; // it can be of any type
}; 发布于 2009-08-03 12:00:51
unsigned char * testComplete = new unsigned char[size+metadata];
unsigned char * actualData = testComplete + metadata;https://stackoverflow.com/questions/1221930
复制相似问题