簡體   English   中英

將一個32位浮點數轉換為兩個16位uint數,然后再次轉換回該32位浮點數

[英]Convert one 32bit float number into two 16bit uint number and then convert back to that 32bit float again

我正在從一個平台向另一個平台轉移32位浮點數。 好吧,它只允許將16位未ing的int成員傳遞給transfter寄存器。 我在想,然后可以將32bit浮點數分成兩個16bit,然后在另一側再次轉換為32bit。

(我正在使用C語言)

喜歡:

float A = 3.14
uint16_t B = A & 0xffff;
uint16_t C = A & 0xffff0000;

float D = C<<16 & B;

顯然這是不正確的,因為在分配浮點數據時會將其轉換為unsigned int。 那么我通常應該怎么做? 會有一些相當成熟的方法來做類似的事情

謝謝

您可以為此使用聯合,例如:

typedef union {
    float f;
    uint16_t a[2];
} U;

U u;

u.f = 3.14f;

printf("%g -> %#x %#x\n", u.f, u.a[0], u.a[1]);

現場演示

注意:嚴格來說,這是不確定的行為,但是由於它被廣泛使用,因此不太可能失敗。 另外,您可以采用一種更安全,但可能效率較低的方法,並使用memcpy,如下所示:

float f = 3.14f;
uint16_t a[2];
memcpy(a, &f, sizeof(a));
printf("%g -> %#x %#x\n", f, a[0], a[1]);

現場演示

暫無
暫無

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

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