[英]can I use std::copy to copy into stringstream
我最近有這樣的情況,我想將int64_t
值的原始字節轉換為字符串流。 在C ++ 17中,我可以執行以下操作:
uint64_t val = 1984;
std::stringstream sstr;
sstr << "the byte value is " << std::string_view(reinterpret_cast<char*>(&val), sizeof(decltype(val)));
鮑勃是你的叔叔。 但我需要用C ++ 98或者C ++ 11來實現。 我想要做以下事情:
std::copy(reinterpret_cast<const char*>(&tmp_time),
reinterpret_cast<const char*>(&tmp_time) + sizeof tmp_time,
std::back_inserter(sstr));
但是在實例化back_inserter
時g ++抱怨在basic_stringstream
沒有名為value_type
類型。
我可以不std::copy
到stringstream
對象嗎? 我該怎么做呢? 注意上面是一個簡單的例子,我不願意放棄流式語義,因為它們在真實環境中非常整潔。
您可以使用std::ostream_iterator
。
std::stringstream ss;
std::copy(reinterpret_cast<const char*>(&tmp_time),
reinterpret_cast<const char*>(&tmp_time) + sizeof tmp_time,
std::ostream_iterator<int>(ss, " "));
您需要決定使用它的類型。 我使用int
將值打印為有符號整數,並使用一個空格作為分隔符。 您可以根據您想要達到的目標選擇其他內容。
使用std::back_inserter
不適用於流,因為它的目的是對容器進行操作。 它創建了std::back_inserter_iterator
,它在傳遞的容器上調用push_back
成員函數。 它還假設Container
具有成員類型value_type
, const_reference
和其他(您可以在此處查看它們的使用方式)。
這里有一個例子: std::back_inserter
返回的迭代器有operator=
定義:
back_insert_iterator<Container> &operator=(typename Container::value_type &&value);
因為std::stringstream
沒有定義value_type
,編譯失敗。
您不需要使用std::copy()
或任何其他算法。 您可以使用流自己的write()
方法,例如:
uint64_t val = 1984;
std::stringstream sstr;
sstr << "the byte value is ";
sstr.write(reinterpret_cast<char*>(&val), sizeof(val));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.