簡體   English   中英

將字節重新解釋為C中的浮點數(IEEE 754單精度二進制)

[英]Reinterpret bytes as float in C (IEEE 754 single-precision binary)

我想將4個字節重新解釋為C中的IEEE 754單精度二進制。

為了獲得表示float的字節,我使用了:

num = *(uint32_t*)&MyFloatNumber;
aux[0] = num  & 0xFF;
aux[1] = (num >> 8) & 0xFF;
aux[2] = (num >> 16)  & 0xFF;
aux[3] = (num >> 24)  & 0xFF;
  • num是一個uint32_t。
  • aux []是int [4]。

要將字節重新解釋為float ,我正在嘗試:

Buff = *(float*)&aux;

在第二種情況下,“ Buff”沒有任何反應

  • 淺黃色是float

在第二種情況下我怎么了?

2個問題:

  1. Buff = *(float*)&aux; 嘗試將4 int數組的地址用作指向浮點數的指針。 aux[]長度可能為16個字節,並且IEEE 754單精度二進制 float預計為4個字節。

  2. (uint32_t*)(float*)調用未定義的行為以及對齊和抗鋸齒問題。 最好使用union

     int main(void) { union { float f; unsigned char uc[sizeof(float)]; } x; // float to bytes xf = 1.23f; printf("%x %x %x %x\\n", x.uc[0], x.uc[1], x.uc[2], x.uc[3]); // bytes to float x.uc[0] = 0xA4; x.uc[1] = 0x70; x.uc[2] = 0x9D; x.uc[3] = 0x3F; printf("%.8e\\n", xf); } 

輸出量

a4 70 9d 3f
1.23000002e+00

暫無
暫無

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

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