字符串中的空字符没有什么特别之处
std::istringstream iss(std::string(data, N));
setBlob(&iss);
当然如果你这样做
std::istringstream iss("haha a null: \0");
它将解释为转换为的 C 风格字符串std::string
,因此将停在\0
,不将其视为真正的内容字节。讲述std::string
大小明确允许它使用任何空字节作为真实内容数据。
如果想直接读取char数组,可以使用strstream
std::istrstream iss(data, N);
这将直接从提供的数据中读取data
, up to N
bytes. strstream
已被正式声明为“已弃用”,但它仍将出现在 C++0x 中,因此您可以使用它。或者您创建自己的streambuf
,如果你确实需要读取原始数据char*
像那样。
struct myrawr : std::streambuf {
myrawr(char const *s, size_t n) {
setg(const_cast<char*>(s),
const_cast<char*>(s),
const_cast<char*>(s + n));
}
};
struct hasb {
hasb(char const *s, size_t n)
:m(s, n)
{ }
myrawr m;
};
// using base-from-member idiom
struct myrawrs : private hasb, std::istream {
myrawrs(char const *s, size_t n)
:hasb(s, n),
std::istream(&static_cast<hasb*>(this)->m)
{ }
};