Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在std::vector中表示原始字节的最佳方法?_C++_Sockets_Stl_Buffer_Stdvector - Fatal编程技术网

C++ 在std::vector中表示原始字节的最佳方法?

C++ 在std::vector中表示原始字节的最佳方法?,c++,sockets,stl,buffer,stdvector,C++,Sockets,Stl,Buffer,Stdvector,我正在使用ZeroMQ库,它使用void*表示任意二进制数据块。但是,我想使用std::vector来复制和移动这些块。制作表示原始字节的std::vector的首选惯用方法是什么?我目前使用的是std::vector,但我想确保我的代码对其他人来说是有意义的。 std::vector<unsigned char> std::vector 或 #包括 向量 我觉得这两种方法都不错。如果您不知道数据的性质,unsigned char是您可以表示的最小的位块,而不会变得混乱。因此,

我正在使用ZeroMQ库,它使用
void*
表示任意二进制数据块。但是,我想使用
std::vector
来复制和移动这些块。制作表示原始字节的
std::vector
的首选惯用方法是什么?我目前使用的是
std::vector
,但我想确保我的代码对其他人来说是有意义的。

std::vector<unsigned char>
std::vector 或

#包括
向量

我觉得这两种方法都不错。

如果您不知道数据的性质,
unsigned char
是您可以表示的最小的位块,而不会变得混乱。因此,它是任何类型的任意内存块的常见类型


因此,向量看起来非常好。

无符号字符
可以。如果要强调八位字节部分,也可以使用
uint8\u t
,甚至可能创建一个您无法真正使用的类。(无需向其中添加字节)ZeroMQ本身是否在任何位置指定是“作为字符”还是“作为无符号字符”读取数据?如果不是,则无符号字符应该可以。如果它指定了
char
,那么您可能希望使用它来强调您提供的是库所期望的内容。ZeroMQ是一个消息传递库,因此它除了在线路上复制和发送数据外,从不对数据执行任何操作。因此,我认为这没关系……
uint8\u t
在没有8位字节的系统上不存在
uint\u least8\t
可能是更好的选择,但
无符号字符
是最佳选择。此解决方案似乎广泛用于存储原始数据。对我来说,不清楚为什么要使用“uint8_t”而不是“int8_t”——有人知道它的优点吗?java只签署了数据类型,为什么在C++中使用无符号int呢?
#include <cstdint>

std::vector<std::uint8_t>