0

現在、32 ビット マシンでは、次のようにバイナリ データをファイルに書き込みます。

outbin.write( reinterpret_cast <const char *> ( &key_session ), sizeof( unsigned int ) );
outbin.write( reinterpret_cast <const char *> ( &last_access_time ), sizeof( time_t ) );
outbin.write( reinterpret_cast <const char *> ( &sizet ), sizeof( size_t ) );
outbin.write( reinterpret_cast <const char *> ( &ddd), sizeof( double ) );
outbin.write( reinterpret_cast <const char *> ( &fff), sizeof( float ) );

データを書き込んで移植可能にし、データがどのマシン (64 ビット) でも確実に読み込まれるようにする方法は? (マシン側でオペレーションシステムを64ビットに変更するか、データを他のマシンにコピーする場合)

4

1 に答える 1

4

C++0x では、std::uint32_tfromのような型を使用します<cstdint>。古いコンパイラでは、C99 ヘッダーを使用し<stdint.h>ます。これは MSVC にはありませんが、さまざまな実装が Web 上に浮かんでいます。int書き込み時にはすべての変数とsize_t変数を型にキャストし<cstdint>、読み取り時にはネイティブ型に戻す必要があります。

float移植可能な既知の幅のバージョンがないため、IEEE 754 の singleおよびdoubledouble 形式と一致すると想定する必要があるかもしれません。いくつかのアサーションがここで役立つ場合があります。

に関してはtime_t、特定されていない方法で時間を表すことができることを除いて、プラットフォーム間で標準化された意味を持たないことに注意してください。

(また、エンディアンに依存しない形式でデータを書き出す場合があることに注意してください。)

于 2012-06-02T10:55:37.160 に答える