0

ファイルから正確に 32 ビットを読み取る必要があります。STLでifstreamを使用しています。私は直接言うことができます:

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ifstream::in);
if (my_stream && !my_stream.eof())
   my_stream >> my_int;

...または、int32 で動作するように >> 演算子をオーバーライドする必要がありますか? ここに int32 がリストされていません: http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

4

2 に答える 2

3

ストリーム抽出演算子 ( >>) は、バイナリ IO ではなく、フォーマットされた IO を実行します。std::istream::read代わりに使用する必要があります。としてファイルを開く必要もありますbinary。ああ、あなたのコードではチェックstd::istream::eofは冗長です。

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ios::in | std::ios::binary);
if (my_stream)
{
    my_stream.read(reinterpret_cast<char*>(&my_int), sizeof(my_int));
}
//Be sure to check my_stream to see if the read succeeded.

これを行うと、整数内のバイトの順序がプラットフォームによって異なるため、コードにプラットフォーム依存が導入されることに注意してください。

于 2010-09-02T22:19:12.847 に答える
2

int32typedef、プラットフォームで 32 ビットの符号付き整数である型に対応します。その基になる型は確かにoperator>>オーバーロードされています。

アップデート

Billy が以下で指摘したように、ストリームはテキストを読み取り、オーバーロードされたデータ型に解析するように設計されています。したがって、コード例では、一連の数字を探します。したがって、ファイルから 32 ビットを読み取ることはありません。

于 2010-09-02T22:12:39.673 に答える