鉴于
const void * data = ...;
size_t size = ...;
std::string message(???)
如何从原始指针构造std::string
数据和数据大小? data
可能包含NUL字符。
答案 0 :(得分:9)
char*
正确, string constructor可以与包含\0
的{{1}}一起使用。
使用字符的第一个计数字符构造字符串 s指向的字符串。 s可以包含空字符。的长度 字符串是计数。如果s没有指向,则行为未定义 至少是CharT的count个元素的数组。
所以只需使用
size
答案 1 :(得分:7)
您可以将data
强制转换为const char*
,然后使用std::string
两个迭代器构造函数。
const char* sdata = static_cast<const char*>(data);
std::string message(sdata, sdata + size);
请注意,您只需要一个字节缓冲区,使用std::vector<unsigned char>
可能更简单,更清晰。
const unsigned char* sdata = static_cast<const unsigned char*>(data);
std::vector<unsigned char> message(sdata, sdata + size);
答案 2 :(得分:1)
只要尺寸表示正确的数字,铸造就可以了。你可以NULL
std::string
,你甚至不需要NULL来终止你的缓冲区。
答案 3 :(得分:1)
当然,如果你已经拥有string
对象
myString.insert(0, static_cast<const char*>(data), size);
^^ -- starting index
调用
basic_string& insert( size_type index, const CharT* s, size_type count );
在位置索引处插入s指向的字符串中的第一个计数字符。 s可以包含空字符。