首頁 > 後端開發 > C++ > 主體

如何在 C 中從常數記憶體建立輸入流?

Linda Hamilton
發布: 2024-11-10 16:49:02
原創
763 人瀏覽過

How to Create an Input Stream from Constant Memory in C  ?

從常數記憶體建立輸入流

從常數記憶體緩衝區讀取數據,就好像它是流一樣,自訂流緩衝區區可以被創建。此緩衝區將引用常數記憶體位置,而不修改其內容。

實作:

以下程式碼定義了一個流緩衝區membuf 和一個輸入流imemstream,利用membuf 緩衝區:

#include <streambuf>
#include <istream>

struct membuf: std::streambuf {
    membuf(char const* base, size_t size) {
        char* p(const_cast<char*>(base));
        this->setg(p, p, p + size);
    }
};
struct imemstream: virtual membuf, std::istream {
    imemstream(char const* base, size_t size)
        : membuf(base, size)
        , std::istream(static_cast<std::streambuf*>(this)) {
    }
};
登入後複製

在在此程式碼中,membuf 使用常數char 指標進行初始化和資料大小。它設定輸入緩衝區(setg)以指向該資料。 imemstream 繼承自 membuf 和 std::istream,有效地將常數記憶體包裝在輸入流中。

用法:

要使用imemstream,請使用以下命令實例化它:常量記憶體指標和大小:

imemstream in(data, size);
登入後複製

然後可以從流中讀取資料:通常:

in >> x >> y >> w;
登入後複製

注意: const_cast 是必要的,因為std::streambuf::setg 需要非常量char 指標。雖然流緩衝區不會修改數據,但該介面需要這種類型以實現“正常”流緩衝區的靈活性。

以上是如何在 C 中從常數記憶體建立輸入流?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板