0
我需要解碼編碼爲IEEE double
(來自iOS NSTimeInterval
)並存儲在8字節數組中的時間戳,以便我可以使用ctime
以可讀的格式打印出時間戳。這在大多數系統中是微不足道的,但不是我的。在不支持雙精度的C編譯器上將64位雙精度浮點數據轉換爲Uint32
Example: on iOS side
uint8_t data[8];
double x = 3.14;
memcpy(data,&x,8);
我在MSP430F5438A上運行,我需要使用COFF ABI鏈接第三方零件庫。如果您使用COFF ABI,則TI的Code Composer不支持64位浮點類型(IEEE雙精度型)。它對待double
與float
(即單精度)相同。
這些不起作用。
uint8_t data[8];
double x;
memcpy(&x,data,8);
或
x = *(double*)data;
或
union {
uint8_t data[8];
double d;
} x;
memcpy(x.data,data,8);
我只是得到亂碼,因爲double
只有4使用的Code Composer字節。我需要一種方法將uint8_t[8]
數據(這是一個合法的IEEE雙精度值)直接轉換爲整數值。
NSTimeInterval不太可能有精確的整數值。它以秒爲單位,亞毫秒精度。精確的精確度沒有被指定,所以你不能用一個已知的值乘以它來縮放到一個確切的整數值。它看起來像這個代碼將趨於零。 –
@EricPostpischil - 是的,我知道。但'time_t'是整數,所以我可以扔掉小數部分。我不需要1秒的準確性。 –