首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于通信的二进制缓冲区,c++

用于通信的二进制缓冲区,c++
EN

Stack Overflow用户
提问于 2011-08-05 07:21:25
回答 3查看 518关注 0票数 0

如果我需要二进制缓冲区对象,

就像TCP/UDP通讯一样,

在c++中,我会以什么为基础呢?

  • vector<unsigned char>
  • std::string?-- std::字符串可以容纳0字节,这与流行的观点相反,因此可以用来保存二进制数据。
  • new char[]
  • malloc()

有人看到用于二进制缓冲区的std::向量了吗?

我没看见。为什么?表演?

我确实看到malloc()经常用于二进制缓冲区。

在C++中。有人能确认吗?解释?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-05 07:28:03

二进制缓冲区可以被看作是存储一些非结构化信息的内存块。从这个意义上说,使用新的char[]malloc是完全等价的,IMO,因为它们给了您一段内存和一个指向它的指针。

使用std::vector是另一回事;除了成本之外,我不认为这是相关的,因为您将使用

代码语言:javascript
运行
复制
&vect[0]

要像对malloc一样访问底层缓冲区,它有其优点,比如缓冲区扩展性和比直接指针更安全的访问;您可以读取在这里讨论。我自己也曾在一个项目中使用过。

std::string在原则上存在C++ (98,03)标准不能保证底层缓冲区的连续性的问题,但这似乎并不是编译器实现的问题。C++0x似乎具有标准化的缓冲区连续性(但我并没有专门搜索它)。因此,您也可以使用它们,但可以在赫伯·萨特的评论之前阅读(它不是在正文中,而是在文章末尾的第三条评论中)。

无论如何,在std::stringstd::vector之间,我会选择std::vector

票数 6
EN

Stack Overflow用户

发布于 2011-08-05 07:38:38

newmalloc的区别在于,new还为它分配内存的实体调用构造函数(如果有的话)。但是,由于char是使用newmalloc的基本类型,所以没有构造函数,所以没有区别。deletefree也是如此。

我会亲自使用char*缓冲区(字符是内存中的1字节):

代码语言:javascript
运行
复制
char* buf = new char[100];

此外,请记住,在释放分配的缓冲区时,要使用如下构造:

代码语言:javascript
运行
复制
delete[] buf;

若要删除数组否则会有内存泄漏。,请执行以下操作。

我不会亲自使用std::stringstd::vector,因为:

  • 一个简单的char数组在我看来更快
  • 更“通用”( std有几个实现,但字节数组总是相同的)
  • 它可能更容易理解和调试。

HTH,

JP

票数 1
EN

Stack Overflow用户

发布于 2011-08-05 07:34:24

这取决于你的程序是如何工作的。是客户端还是服务器?发送/接收固定长度的请求吗?以后需要修改数据吗?您想要以字符串的形式操作吗?

我会使用std::string,因为它在这方面是最灵活的。但正如你所看到的,这并不是最理想的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6952820

复制
相关文章

相似问题

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