[英]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;
要將字節重新解釋為float
,我正在嘗試:
Buff = *(float*)&aux;
在第二種情況下,“ Buff”沒有任何反應
float
。 在第二種情況下我怎么了?
2個問題:
Buff = *(float*)&aux;
嘗試將4 int
數組的地址用作指向浮點數的指針。 aux[]
長度可能為16個字節,並且IEEE 754單精度二進制 float
預計為4個字節。
(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.