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

时间:2015-09-08 13:01:40

标签: c++

鉴于

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

std::string message(???)

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

4 个答案:

答案 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可以包含空字符。