【发布时间】:2010-05-06 10:36:24
【问题描述】:
我正在一些 C++ 中为嵌入式系统封装用户空间 linux 套接字功能(是的,这可能又是在重新发明轮子)。
我想提供一个使用向量的读写实现。
写很容易,我可以通过&myvec[0] 避免不必要的复制。我想做同样的事情并直接读入向量,而不是读入字符缓冲区然后将所有内容复制到新创建的向量中。
现在,我知道我要读取多少数据,并且可以适当分配 (vec.reserve())。我也可以阅读&myvec[0],尽管这可能是一个非常糟糕的想法。显然这样做不允许 myvec.size 返回任何合理的东西。有没有办法做到这一点:
- 从安全/C++ 的角度来看并不完全令人讨厌
- 不涉及数据块的两个副本 - 一次从内核到用户空间,一次从 C
char *样式缓冲区到 C++ 向量。
【问题讨论】:
-
一个字符向量(嗯,字节)!
-
您可能希望使用
uint8_t或unsigned char作为字节。 -
@tzaman:
read采用char*,因此无论您如何修饰它,如果您想要保证无符号数据,您必须在某个时候转换或重新解释。在带有签名字符的非 2 补码系统上,重新解释(通过使用vector<unsigned char>)将是灾难性的。在更明智的系统上,这只是一个问题,即您是要强制转换指针,还是在将值从向量中取出时隐式转换。