Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Strim Input daripada Memori Malar dalam C?

Bagaimana untuk Mencipta Strim Input daripada Memori Malar dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-11-10 16:49:02764semak imbas

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

Mencipta Strim Input daripada Memori Malar

Untuk membaca data daripada penimbal memori malar seolah-olah ia adalah strim, penimbal strim tersuai boleh dibuat. Penampan ini akan merujuk lokasi memori malar tanpa mengubah suai kandungannya.

Pelaksanaan:

Kod berikut mentakrifkan penimbal strim, membuf dan strim input, imemstream, menggunakan penimbal 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)) {
    }
};

Dalam kod ini, membuf dimulakan dengan penunjuk char dan saiz data yang tetap. Ia menyediakan penimbal input (setg) untuk menunjuk kepada data ini. imemstream mewarisi daripada kedua-dua membuf dan std::istream, dengan berkesan membalut memori malar dalam aliran input.

Penggunaan:

Untuk menggunakan imemstream, buat seketika dengan penuding dan saiz memori malar:

imemstream in(data, size);

Data kemudiannya boleh dibaca dari strim seperti biasa:

in >> x >> y >> w;

Nota: Const_cast adalah perlu kerana std: :streambuf::setg memerlukan penunjuk char bukan const. Walaupun penimbal strim tidak akan mengubah suai data, antara muka memerlukan jenis ini untuk fleksibiliti dalam penimbal strim "biasa".

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Strim Input daripada Memori Malar dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn