首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将元信息添加到char数组的优雅方法

将元信息添加到char数组的优雅方法
EN

Stack Overflow用户
提问于 2009-08-03 11:56:00
回答 4查看 296关注 0票数 1

我想将一些信息和一些元数据打包到一个字节数组中。在下面的内容中,我有3个字节的信息,这些信息具有一定的偏移量,加上4个字节的元数据添加到包的末尾。我提出的解决方案1很明显可以做到这一点,但需要第二个tmp变量,这是我不太喜欢的。

代码语言:javascript
复制
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);

另一种简单的解决方案是通过以下方式完成:

代码语言:javascript
复制
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 ); 

然而,我不喜欢这里的事实,每次我有元数据偏移量添加,以便我在我的最终包获得正确的索引。有没有另一种优雅的解决方案,没有我的方法的缺点?

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2009-08-03 12:07:42

将数据和元数据存储在单独的char数组中,放在一个结构中。在数组的长度上模板化结构。

票数 2
EN

Stack Overflow用户

发布于 2009-08-03 12:49:09

我建议您使用C++工具。使用真实的类来组成数据。在类内部,优先使用std::vector<>而不是普通数组来存储数据(除非确实需要将数据存储在堆中)。如果需要,您可以提供对向量中内部数据的常量访问器。

代码语言:javascript
复制
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
}; 
票数 2
EN

Stack Overflow用户

发布于 2009-08-03 12:00:51

代码语言:javascript
复制
unsigned char * testComplete = new unsigned char[size+metadata];
unsigned char * actualData = testComplete + metadata;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1221930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档