[英]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缺少此功能,但是它的各種實現在網絡上浮動。 寫入時必須將所有int
和size_t
變量轉換為<cstdint>
類型,而在讀取時則轉換為本機類型。
float
和double
沒有可移植的已知寬度版本,因此您可能必須假定它們與IEEE 754中的單格式和雙格式匹配。某些斷言可能在這里有所幫助。
至於time_t
,請注意,它在各個平台之間沒有標准化的含義,只是它可以以某種未指定的方式表示時間。
(此外,請記住,您可能希望以字節序無關的格式寫出數據。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.