web-dev-qa-db-ja.com

std :: byteの目的は何ですか?

これでc ++ 17にはstd::byte、ファイルをcharに読み取るコードを、byteにファイルを読み取るコードに変換する方法を探していました。ファイルには、整数の束ではなくバイトが含まれています。

次に、私は この質問この他の質問 を読んで、ファイルをbyteに読み取るのは間違っており、charにファイルを読み取るのは正しいと主張しました。

byteがメモリへのアクセスを目的として設計されていない場合、類推すると、ファイルの目的は何ですか?他の2つで引用されているとおり質問:

Charやunsigned charと同様に、他のオブジェクト(オブジェクト表現)が占有するrawメモリへのアクセスに使用できますが、これらのタイプとは異なり、文字タイプではなく、算術タイプでもありません。バイトはビットのコレクションにすぎず、ビットごとの論理演算子のみが定義されています。

これは、文字ではなく、ファイルの読み取りに使用する必要がある正確なタイプのように聞こえます。

24
user8370684

あなたはおそらく物事を誤解しているでしょう。

byteは、「メモリへのアクセス」を目的としています。ストレージが文字の配列ではなく単なるバイトのシーケンスである場合に、タイプを使用することを目的としています。

Iostream型はbyteで特化することはできません。それらはインターフェイスとして文字を中心に設計されているためです。つまり、ファイルをバイトのシーケンスと見なしません。彼らはそれらを一連の文字と見なします。これで、1つまたは2つのキャストを使用して、byte配列に直接読み取ることができます。しかし、これはiostreamがネイティブに考える方法ではありません。

Iostreamの動作とfilesの動作を区別する必要があります。 Iostreamは1つのファイルにすぎませんIOライブラリ、結局のところ、それはほとんどすべてのファイルAPIの終わりではありません。

バイナリデータを読み取るためのほとんどのファイルAPIは、文字配列ではなくvoid*を使用します。 std::fread/fwriteなど。

つまり、これをstd::byteの問題ではなく、iostreamの問題と考える必要があります。それらの長い行のちょうど別のもの。

17
Nicol Bolas