Рассмотрим нетипизированный буфер, void*
, из которого я беру несколько байтов, чтобы рассматривать их как значение с плавающей запятой, float
или double
.Давайте предположим, что значения с плавающей запятой совместимы с IEEE-754 на моей машине.Таким образом, может быть двоичная последовательность из буфера, которая не представляет никакого допустимого значения с плавающей точкой.Попытка работать с такой переменной с плавающей точкой, заполненной недопустимым двоичным файлом, приведет к ошибке программы.
Как я могу защититься от прерывания программы в таком случае - то есть, как я могу получить информацию о недопустимом двоичном файле в переменной с плавающей запятой?
ps Каков правильный способизвлечь с плавающей точкой из нетипизированного буфера?Я слышал, что трюк с наложением объединения типа
void* buf;
union U {int i; float f;};
U *u = (U*) buf;
u->i = binvalue;
fpvalue = u->f;`
недействителен, даже если buf
правильно выровнен.