CAd*_*ker 38
我用了std::vector<unsigned char>.您需要的大多数操作都可以使用带有迭代器范围的STL来完成.另外,请记住,如果您确实需要原始数据,&v[0]则保证提供指向底层数组的指针.
sth*_*sth 24
您也可以使用std::string二进制数据.数据的长度std::string是显式存储的,而不是由null终止确定的,因此空字节在a中没有特殊含义std::string.
std::string通常比std::vector<char>提供许多方法更方便,因为它提供了许多方法,可用于处理二进制数据但不提供vector.要解析/创建二进制数据,有必要substr()为您提供重载+等std::stringstream优点.在向量上,<algorithm>可以使用算法来实现相同的效果,但它比字符串方法更笨拙.如果您只是对"字符序列"进行操作,std::string则为您提供通常需要的方法,即使这些序列恰好包含"二进制"数据.
Don*_*hey 21
你应该使用std::vector<unsigned char>或std::vector<uint8_t>(如果你有一个现代stdint.h标题).使用unsigned char[]或uint8_t[]使用固定大小的缓冲区时没有任何问题.std::vector当你需要经常成长或附加到你的缓冲区时真正发光的地方.STL迭代器与指针具有相同的语义,因此STL算法std::vector与普通旧数组的工作方式相同.
正如CAdaker指出的那样,表达式&v[0]保证为您提供到向量缓冲区的底层指针(并且它保证是一个连续的内存块).此保证已添加到C++标准的附录中.
就个人而言,我会避免使用std::string操纵任意字节缓冲区,因为我认为这可能会让人感到困惑,但这并不是闻所未闻的.