Копирование битовую структуру значения float
в наоборот uint32_t
или (не бросая их), мы можем копировать биты байт в байт с использованием std::copy
или memcpy
. Другой способ заключается в использовании reinterpret_cast
, как показано ниже:Копировать битовый шаблон: поплавок uint32_t
float f = 0.5f;
uint32_t i = *reinterpret_cast<uint32_t*>(&f);
или
uint32_t i;
reinterpret_cast<float&>(i) = 10;
Однако есть claim, что говорит два reinterpret_cast
используемый выше, вызовите неопределенное поведение.
Это правда? Как?
Как указано в ответе, это UB. утверждение, что 'sizeof (uint32_t) == sizeof (float)', хотя должно быть все, что вам нужно, чтобы быть уверенным, что оно будет работать. – NathanOliver
@NathanOliver Но если компилятор выполняет оптимизацию псевдонимов на основе типа, он может разумно нарушить поведение, если вы не предоставляете '-fno-strict-aliasing' или что-то еще. – TartanLlama
@TartanLlama Хорошая точка. проверка 'alignof' также может потребоваться. – NathanOliver