Сомнительный:
В C вы можете сделать следующее, что потенциально небезопасно (из-за строгих правил наложения имен):
int i = XXX;
float f;
*(int *)&f = i;
и основывается на предположении, что sizeof(int) == sizeof(float)
.
Менее сомнительно:
Более безопасным, но более длинным, является следующее:
int i = XXX;
float f;
memcpy(&f, &i, sizeof(int));
Это все еще зависит от соответствия размеров типов данных. Тем не менее, оба из вышеперечисленного предполагают, что внутренняя часть используемой вами библиотеки не будет ничего делать с данными. Например, у него не будет специальной обработки для NaN или +/- бесконечности и т. Д.
Safe:
Если вы будете растрачивать два поплавка на одно целое, вы можете сделать что-то вроде:
.
int i = XXX;
float f[2] = { (i & 0xFFFF), ((unsigned)i >> 16 };
Этот последний является безопасным (кроме некоторых довольно разумных предположений о размерах поплавков и целых).