如何从字节序列构造C++字符串?

vla*_*don 8 c++

特定

const void * data = ...;
size_t size = ...;

std::string message(???)
Run Code Online (Sandbox Code Playgroud)

如何std::string从原始指针构造数据和数据大小?data可能包含NUL字符.

For*_*veR 9

字符串构造函数可以使用char*,包含\0,如果size是正确的.

使用s指向的字符串的第一个计数字符构造字符串.s可以包含空字符.字符串的长度是count.如果s未指向CharT的至少count个元素的数组,则行为未定义.

所以只需使用

std::string message(static_cast<const char*>(data), size);
Run Code Online (Sandbox Code Playgroud)

  • 快速回答者的痛苦:-) (2认同)

jua*_*nza 7

你可以强制转换dataconst char*,然后使用std::string两个迭代器构造函数.

const char* sdata = static_cast<const char*>(data);
std::string message(sdata, sdata + size);
Run Code Online (Sandbox Code Playgroud)

请注意,您只需要一个字节缓冲区,使用它可能更简单,更清晰std::vector<unsigned char>.

const unsigned char* sdata = static_cast<const unsigned char*>(data);
std::vector<unsigned char> message(sdata, sdata + size);
Run Code Online (Sandbox Code Playgroud)