Предполагая, что переменная unsigned long long
содержит значение, которое является допустимым значением double
, вы можете использовать type punning , например, с помощью союзов:
union
{
unsigned long long i;
double f;
} value = { .i = 0x403670A3D70A3D71 };
printf("0x%llx is %f\n", value.i, value.f);
Примечание что это действительно только , если значение в целом числе имеет тот же битовый шаблон, что и действительное значение с плавающей запятой двойной точности в вашей системе. В противном случае это может привести к неопределенному поведению .
Теперь, если вы хотите преобразовать его в значение int
22
(поскольку 0x403670A3D70A3D71
является двоичным представлением double
value 22.44
), затем вам сначала нужно использовать type-punning для получения значения с плавающей запятой, а затем использовать функцию floor
, чтобы усечь его до целочисленного значения (но все еще в плавающем тип точки) и, наконец, приведите это к int
:
int int_val = (int) floor(value.f);