[英]Passing content of float32 to a int32 in C
問題:
我想將float32變量的所有內容傳遞給int32,但是請執行以下操作:
float32 source;
int32 destination;
source = 23.59463; // Hex = 0x41BCC1CE
destination = 0; // Hex = 0x00000000
destination = source; // Destination = 0x00000017 = 23
這不會傳遞所有內容。 我嘗試了強制轉換,並試圖間接獲取內容,但是隨后我遇到了指針類型的問題。
題:
1)如何將float32的所有內容都捕獲到int32中?
如果要逐字節復制,那就是
assert(sizeof(source) == sizeof(destination));
memcpy(&destination, &source, sizeof(source));
作為替代答案,指針總是很有趣:
destination = *(int32*)&source;
當您執行分配destination = source
, source
變量將轉換為整數,從而被截斷。
解決此問題的一種方法是使用union
:
union U
{
float32 f;
int32 i;
};
union U u;
u.f = 23.59463;
printf("%08x\n", u.i);
注意:如果要發送此整數(通過網絡或串行通信),則必須記住不同的平台具有不同的字節序 。
如果“所有內容”表示所有數字,則可以乘以源以獲得定點目標。
destination = source * 100000;//23.59463 * 100000 = 2359463
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.