在 C 中从 int 到 double 的平台独立转换(避免 SIGBUS)

Platform independant cast from int to double in C (avoid SIGBUS)

一开始我对 C 语言不是很流利 - 这听起来像是微不足道且显而易见的事情,但尽管使用谷歌搜索,我在纯 C 语言中没有发现任何其他东西

double theDouble = (double) theInt;

这在我的 Windows 64 位计算机上运行良好,但在 32 位 UNIX 系统 (Android) 上我在这条线上得到了一个 SIGBUS。是否没有一种很好的独立于平台的方法将此 int 转换为 double(我希望执行真正的除法)

这是代码的完整摘录:

int *rat;
BYTE *prm;
// blah blah some assignment is done on prm
rat = (int*)prm;  //For RATIONAL decoding
prm = (BYTE*)&iOffset;
double rat0= (double)rat[0]; // SIGBUS here on the cast, only on the Android device not on Windows

我认为这是由于 Android 系统上 double 和 int 的不同分配大小造成的,除非我遗漏了什么。 This thread 似乎暗示这是我不应该做的事情,但这肯定是一个有效的用例吗?

一些系统要求 int 对象位于特定的字节边界上。您的 prm 指针可能不在这样的边界上。使用 memcpy 到适当的 int 变量,然后分配给你的 double.

int temp;
BYTE *rat = prm;
prm = (BYTE*)&iOffset;
memcpy(&temp, rat, sizeof(temp));
double rat0 = temp;