存储大量不同类型数据的最佳方式?

发布于 2024-12-06 23:09:27 字数 116 浏览 0 评论 0 原文

我想存储一个缓冲区数据。我必须以字节、字和双字的形式将数据附加到data。实现数据的最佳方式是什么? STL中有什么东西可以解决这个问题吗?

I want to store a buffer data. I will have to append data to data in the form of BYTEs, WORDs, and DWORDs. What is the best way to implement data? Is there something in the STL for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2024-12-13 23:09:27

从你所说的来看,听起来你想在 STL 容器中拥有不同的类型。有两种方法可以做到这一点:

  1. 拥有对象的层次结构并存储对它们的引用/指针(即 std::vector >
  2. 使用 boost::variant (即std::vector>)

但是,如果您需要与一些旧版 C 代码交互,或者发送原始代码数据通过网络传输,这可能不是最好的解决方案。

From the little you've said, it sounds like you want to have different types in an STL container. There are two ways to do this:

  1. Have a hierarchy of objects and store a reference/pointer to them (i.e. std::vector< boost::shared_ptr<MyBaseObject> >
  2. Use boost::variant (i.e. std::vector< boost::variant<BYTE, WORD, DWORD> >)

If, however, you need to interface with some legacy C code, or send raw data over the network, this might not be the best solution.

箹锭⒈辈孓 2024-12-13 23:09:27

如果要创建完全非结构化数据的连续缓冲区,请考虑使用 std::vector

// Add an item to the end of the buffer, ignoring endian issues
template<class T>
addToVector(std::vector<char>& v, T t)
{
  v.insert(v.end(), reinterpret_cast<char*>(&t), reinterpret_cast<char*>(&t+1));
}

// Add an item to end of the buffer, with consistent endianness
template<class T>
addToVectorEndian(std::vector<char>&v, T t)
{
  for(int i = 0; i < sizeof(T); ++i) {
    v.push_back(t);
    t >>= 8; // Or, better: CHAR_BIT
  }
}

If you want to create a contiguous buffer of completely unstructured data, consider using std::vector<char>:

// Add an item to the end of the buffer, ignoring endian issues
template<class T>
addToVector(std::vector<char>& v, T t)
{
  v.insert(v.end(), reinterpret_cast<char*>(&t), reinterpret_cast<char*>(&t+1));
}

// Add an item to end of the buffer, with consistent endianness
template<class T>
addToVectorEndian(std::vector<char>&v, T t)
{
  for(int i = 0; i < sizeof(T); ++i) {
    v.push_back(t);
    t >>= 8; // Or, better: CHAR_BIT
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文