簡體   English   中英

cpp二進制數據可移植性

[英]cpp binary data portability

當前,在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位或將數據復制到其他計算機上時)

在C ++ 0x中,使用<cstdint> std::uint32_t類的類型。 在較早的編譯器中,請使用C99標頭<stdint.h> ; MSVC缺少此功能,但是它的各種實現在網絡上浮動。 寫入時必須將所有intsize_t變量轉換為<cstdint>類型,而在讀取時則轉換為本機類型。

floatdouble沒有可移植的已知寬度版本,因此您可能必須假定它們與IEEE 754中的單格式和雙格式匹配。某些斷言可能在這里有所幫助。

至於time_t ,請注意,它在各個平台之間沒有標准化的含義,只是它可以以某種未指定的方式表示時間。

(此外,請記住,您可能希望以字節序無關的格式寫出數據。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM