gpt4 book ai didi

c++ - "Proper"用 C++/STL 存储二进制数据的方式

转载 作者:IT老高 更新时间:2023-10-28 14:00:00 26 4
gpt4 key购买 nike

一般来说,在 C++ 中存储二进制数据的最佳方式是什么?据我所知,这些选项几乎可以归结为使用字符串或 vector 。 (我将省略 char*s 和 malloc()s 的可能性,因为我专门指的是 C++)。

通常我只使用一个字符串,但是我不确定是否缺少开销,或者 STL 在内部进行的转换可能会破坏二进制数据的完整性。有没有人对此有任何指示(har)?以一种或另一种方式提出建议或偏好?

最佳答案

char 的 vector 很好,因为内存是连续的。因此,您可以将它与许多 C API 一起使用,例如 berkley 套接字或文件 API。例如,您可以执行以下操作:

  std::vector<char> vect;
...
send(sock, &vect[0], vect.size());

它会正常工作的。

您基本上可以像对待任何其他动态分配的字符缓冲区一样对待它。您可以上下扫描寻找神奇的数字或模式。您可以部分就地解析它。对于从套接字接收,您可以非常轻松地调整其大小以附加更多数据。

缺点是调整大小不是非常有效(谨慎调整大小或预分配),从数组前面删除也将非常低效。例如,如果您需要非常频繁地从数据结构的前面一次弹出一个或两个字符,那么在此处理之前复制到双端队列可能是一种选择。这会花费您一个拷贝,并且双端队列内存不是连续的,因此您不能只将指针传递给 C API。

最重要的是,在深入研究之前了解数据结构及其权衡,但是我看到的一般实践中通常使用 char 的 vector 。

关于c++ - "Proper"用 C++/STL 存储二进制数据的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com