Короче говоря, нет, вы не можете преобразовать последовательность byte
s непосредственно в double
путем сдвига битов, как показано в примере кода.
byte
, целочисленный тип и double
, тип с плавающей запятой (т. Е. Не целочисленный тип) не совместимы по битам (т. Е. Вы не можете просто сдвинуть биты к значениям группы байтов в тип с плавающей запятой и ожидать эквивалентного результата.)
1) Предполагая, что байтовый массив является буфером памяти, ссылающимся на целочисленное значение, вы должны иметь возможность преобразовать ваш массив byte
в 128-битное целое число посредством сдвига битов, а затем преобразовать полученное целое число в double
, Не забывайте, что в зависимости от архитектуры процессора могут возникать проблемы с порядком байтов.
2) Предполагая, что байтовый массив является буфером памяти, который содержит 128-разрядное длинное двойное значение, и при условии, что нет никаких проблем с порядком байтов, вы должны иметь возможность запоминать значение из байтового массива в длинное двойное значение
union doubleOrByte {
BYTE buffer[16];
long double val;
} dOrb;
dOrb.val = 3.14159267;
long double newval = 0.0;
memcpy((void*)&newval, (void*)dOrb.buffer, sizeof(dOrb.buffer));