簡體   English   中英

如何將字節從 uint64_t 轉換為 double?

[英]How to convert bytes from uint64_t to double?

我有二進制文件,我從中讀取了uint64_t val(使用小端)。 現在我想將此uint64_t轉換為double (不僅僅是強制轉換,而是如果我從文件中輸入它的double )。 所以應該有相同的位表示。 我該怎么做?

簡單便攜的方式:

uint64_t u64 = read_from_file();
double d;
memcpy(&d, &u64, sizeof(d));

大多數編譯器會為此生成幾條指令。

這是一種方法:

uint64_t val = someCodeThatReadsTheValue();
auto valPtr = &val;
double dVal = *reinterpret_cast<double*>(valPtr);

正如評論中所指出的,這是Undefined Behavior ,盡管它可以在大多數編譯器中工作。

如果您不想信任您的編譯器,您可以執行以下操作。

uint64_t val1 = someCodeThatReadsTheValue();
double val2;
char* p1 = reinterpret_cast<char*>(&val1);
char* p2 = reinterpret_cast<char*>(&val2);
for(int i = 0; i < sizeof(uint64_t); i++)
    p2[i] = p1[i];

放棄這個只是一個有趣的事實,就像@chqrlie 的答案一樣,使用memcpy更容易。 除非你不能使用 C 標准庫。

暫無
暫無

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

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